custom URL schemeは一意に所有できない
Appleは、複数アプリが同じcustom URL schemeを登録でき、その場合どのアプリが対象になるかは保証されないと説明しています。reverse DNS形式のscheme名は衝突を減らすベストプラクティスですが、他アプリによる同じscheme登録を技術的に禁止するものではありません。
Universal Linksはドメイン関連付けを検証する
Universal LinksはWebサーバー上のAASAとアプリ側設定を使い、WebサイトがそのアプリにURL処理を許可していることを検証します。Android App Linksも assetlinks.json と署名情報で関連付けを確認します。
この所有確認が、custom schemeに対する大きなセキュリティ上の違いです。
LINEがline://を非推奨にした理由も参考になる
LINEヤフーは、特定条件下で意図しない別アプリが line:// を扱う乗っ取り攻撃を防ぐため、このschemeを非推奨にしています。現在はHTTPSベースのLINE URL schemeを案内しています。
第三者サービスの古いscheme例をWeb上からコピーして使い続けるのではなく、現行一次情報を確認する必要があります。
URLパラメータを信用しない
アプリがdeep linkから受け取るパスやquery parameterは外部入力です。Appleもcustom URL schemeについて、不正URLを捨て、ユーザーデータを危険にさらす操作を制限するよう警告しています。
redirectを挟む場合
短縮URLや中間redirectは運用に便利ですが、遷移先の検証やパラメータ維持、open redirect化していないかの確認が必要です。またGoogle Adsの一部用途ではredirect型deep link自体が非対応です。
第三者サービス向けリンク生成では
本製品のように第三者サービスのscheme/Intent候補を生成する場合、対象サービス側のscheme仕様変更もリスクになります。生成できることと安全・公式・永続対応は同じではありません。
確認チェックリスト
- 自社アプリならUniversal Links/App Linksを使えないか。
- custom scheme名の衝突リスクを理解しているか。
- 受信パラメータを検証しているか。
- 秘密情報をURLへ入れていないか。
- redirect先を自由入力にしてopen redirect化していないか。
- 第三者サービスschemeは現行一次情報を確認したか。