1

セキュリティの脆弱性を回避するために、インターフェイスoriginを実装するイベントのプロパティを確認する必要があるのはいつですか?MessageEvent

origin 属性は、初期化された値を返す必要があります。サーバー送信イベントとクロスドキュメント メッセージングでは、メッセージを送信したドキュメントの発信元を表します (通常は、ドキュメントのスキーム、ホスト名、およびポートですが、パスやフラグメントではありません)。

このプロパティは、サーバー送信イベント、Web ソケット、クロスドキュメント メッセージング、チャネル メッセージング、およびブロードキャスト チャネルによって公開されます。

何を知っておくべきですか?何に注意する必要がありますか?何を覚えておくべきですか?

どのようなシナリオでoriginプロパティをチェックするのが理にかなっていますか?

originまったくチェックする必要がありますか、それともisTrustedプロパティだけをチェックする必要がありますか?

var websocket = new WebSocket('ws://echo.websocket.org/');
websocket.onmessage = function(e) {
  // Can I trust this event?
  // Do I need to check e.origin?
};
4

1 に答える 1

1

origin プロパティはいつ確認する必要がありますか?

ベスト プラクティス:常に.

何を知っておくべきですか?何に注意する必要がありますか?何を覚えておくべきですか?

他のパーティと通信しているときはいつでも、そのパーティは敵対的である可能性があります。通信の内容によっては、特に a) データを共有する b) 要求に応じて行動する場合、これはセキュリティ上の問題になる可能性があります。これはほとんどの場合です。

要点は、どの当事者もあなたとのコミュニケーションを開始しようとすることができ、あなたがそれを開始したとしても、クロスドキュメント メッセージング (フレーム、タブなど) とチャネルの場合、相手が (ナビゲーション、転送によって) 変更する可能性があるということです。誰と通信しているのか、またそれが必要かどうかを明示的に確認する必要があります。

MDNpostMessageを引用するには:

他のサイトからメッセージを受信する予定がない場合は、メッセージ イベントのイベント リスナーを追加しないでください。これは、セキュリティ上の問題を回避するための完全に確実な方法です。
他のサイトからメッセージを受信することが予想される場合は、origin プロパティと場合によっては source プロパティを使用して送信者の ID を常に確認してください。どのウィンドウ (たとえば、http://evil.example.comを含む) も他のウィンドウにメッセージを送信できますが、未知の送信者が悪意のあるメッセージを送信しないという保証はありません。ただし、身元を確認した後でも、受信したメッセージの構文を常に確認する必要があります。そうしないと、信頼できるメッセージのみを送信すると信頼していたサイトのセキュリティ ホールが、サイトにクロスサイト スクリプティング ホールを開く可能性があります。

オリジンをまったく確認する必要がありますか、それとも isTrusted プロパティだけを確認する必要がありますか?

いいえ、isTrustedプロパティはまったく異なることを行います。また、ブラウザーは、特にクロスオリジン メッセージングを行う場合に、信頼できるドメインとそうでないドメインを認識できません。

于 2016-09-21T17:03:50.363 に答える