web-dev-qa-db-ja.com

安全にpostMessageを使用する方法

postMessageHTML5で導入されたプリミティブ Webサイトがクロスオリジン通信に使用できることです。

postMessageを安全に使用するにはどうすればよいですか?セキュリティの落とし穴や注意すべき主な間違いは何ですか?

21
D.W.

W3Cセキュリティ手順 これは驚くほど正確で完全です:

作成者は、Origin属性をチェックして、メッセージの受信を予期しているドメインからのみメッセージが受け入れられるようにする必要があります。そうしないと、作者のメッセージ処理コードのバグが悪意のあるサイトによって悪用される可能性があります。

さらに、Origin属性を確認した後でも、作成者は問題のデータが予期した形式であることも確認する必要があります。そうでない場合、イベントのソースがクロスサイトスクリプティングの欠陥を使用して攻撃された場合、postMessage()メソッドを使用して送信された情報の未チェックの処理により、攻撃がレシーバーに伝播する可能性があります。

作成者は、機密情報を含むメッセージのtargetOrigin引数でワイルドカードキーワード(*)を使用しないでください。ワイルドカードキーワードを使用しないと、メッセージが意図された受信者にのみ配信されることを保証できません。

Originからのメッセージを受け入れる作成者は、サービス拒否攻撃のリスクを考慮することをお勧めします。攻撃者は大量のメッセージを送信する可能性があります。受信ページが高価な計算を実行したり、そのようなメッセージごとにネットワークトラフィックを送信させたりする場合、攻撃者のメッセージはサービス拒否攻撃につながる可能性があります。作成者は、そのような攻撃を非現実的にするために、レート制限(1分あたり特定の数のメッセージのみを受け入れる)を採用することが推奨されます。

最も重要なことは、常にOriginを検証することです。これを実行できないサイトの数に驚かれることでしょう。メッセージが機密情報である場合は、targetOrigin引数を指定する必要があります。

もちろん、これはブラウザの実装が正しく、穴がないことを前提としています。主要なブラウザが評価され、問題は見つかりませんでした。

こちらもご覧ください postMessage Security Reviewのチェックリスト

16