@owengot と話し合った後、問題の詳細な説明を以下にまとめました。
これは Vue.js ベースの Web アプリケーションで、独自のサーバーサイドコンポーネントは持たず、スタンドアロンの Web アプリケーションとして Discourse API を利用しています。つまり、ある意味では Discourse 自体がサーバーとして機能しています。使用例としては、ユーザーアカウント名下の Discourse トピックにコンテンツを投稿するスタンドアロンのアンケートやフォームなどが挙げられます。このようなソフトウェアをカスタムのサーバーサイドコンポーネントなしに構築できるという点で、このアーキテクチャは魅力的でした。そのため、可能な限り「サーバーサイド」の処理は避けたいと考えています。
現在、User-API キーの取得は意図通り機能していますが、@owengot が JavaScript 上で秘密鍵を生成するステップに非常に時間がかかる(最大10秒かかるなど、JavaScript では非効率的である)ことを発見しました。その後、同じ秘密鍵を複数のユーザーで共有できるというハックを発見し、それを Web ホスト上のファイルに保存しました。このホストは Web アプリケーションの他の静的ファイル(JS、CSS など)も提供しています。これにより高速化されましたが、その秘密鍵は(1)共有されたものとなり、(2)公開 URL でアクセス可能な状態で保存されることになりました。これは、ええと、恐ろしいことのように思えます ![]()
そこで、このハックのセキュリティ上の影響について Discourse チームに相談する必要があると伝えました。ここでは二つの基本的な選択肢があります。
-
もしその秘密鍵が「単に」ペイロードの暗号化にのみ使用されるのであれば、通信自体が SSL/HTTPS で暗号化されているため、この状況でも許容できるかもしれません。
-
しかし、その秘密鍵を知ることで、後に誰かの Discourse アカウント名下で投稿するために使用される User-API キーを計算できるのであれば、このハックは明らかに受け入れられません。