カスタムプロトコルって何?
カスタムプロトコルとは何か、を改めて説明する機会がありました。ここではその説明を記載しておきます。
カスタムプロトコルとは何か
カスタムプロトコルは、アプリケーション独自に定義したURLスキームのことです。前提として、https:// や mailto: といったURLスキームが標準的に用意されていますが、それに対してアプリケーション独自に定義したスキームをカスタムプロトコルと呼びます。
よく見かけるモノとしては、Zoomの zoommtg://、Slackの slack://、VSCodeの vscode:// などがあります。ブラウザやOS上でこれらのURLをクリックすると、対応するアプリが起動されたり、特定の動作を実行されたりします。
仕組み
カスタムプロトコルが設定されたURLスキームがクリックされると、OSがそのスキームに登録されているアプリケーションを探して起動します。URLが引数になります。アプリケーション側は、URLを考慮して処理を実行します。
カスタムプロトコルには、URLには任意の文字列が含まれるので、引数として受け取った値が無検証で使うと、コマンドインジェクションや任意ファイルアクセスにつながることがあります。過去にもSteamやZoomなどで実際に脆弱性が報告されています。さらに、誰でもスキームを登録できるので、悪意あるアプリが正規アプリのスキームを乗っ取るパターンもあります。また、ドメイン所有権と紐づけるための、Universal Links(iOS)、App Links(Android)のような仕組みが存在していたりもしているようです。
スキームの管理
スキームは、OS側で管理されます。カスタムプロトコルは、アプリケーション間の連携なので、そのレイヤーを管理するのはOSです。また、アプリケーション固有で管理すると、スキームの乗っ取りが発生しやすくなるでしょう。
今回は、たまに見かける仕組みを改めて調べて説明してみました。