2016-09-21 1 views
1

セキュリティの脆弱性を避けるために、MessageEventインターフェイスを実装するイベントのoriginプロパティをいつチェックする必要がありますか?オリジンのプロパティをいつチェックする必要がありますか?

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? 
}; 

答えて

1

は、ときに私が原点プロパティをチェックする必要がありますか?

ベストプラクティス:常にです。

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

他の相手と通信しているときはいつでも、その相手は敵対的かもしれません。コミュニケーションの内容によっては、セキュリティ上の問題があります。特に、a)データを共有する場合b)リクエストに基づいて行動します。

ポイントはです。あなたがそれを開始したとしても、相手があなたとのコミュニケーションを開始しようとする可能性があります。クロスドキュメントメッセージング(フレーム、タブなど)の場合、 、転送によって)。あなたは、あなたが誰とコミュニケートしているか、そしてそれを望んでいるかどうかを明示的にチェックする必要

メッセージイベントのイベントリスナーを追加しない、他のサイトからメッセージを受け取ることを期待していない場合:MDN on postMessageを引用する

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

私も全くの原点を確認するか、単にisTrustedプロパティする必要がありますか?

いいえ、isTrusted propertyはまったく別のことをします。また、ブラウザは、信頼できるドメインと信頼できないドメインを知ることはできません。

+0

websocketインスタンスで 'message'イベントのイベントリスナーを登録すると、自分のイベントハンドラが自分自身ではないイベントを受け取ることができますか? – Fred

+0

Webソケットとサーバー送信イベントでは、エンドポイントを信頼する場合はチェックを省略できます。リダイレクトの場合に '.origin'がどのように動作するかは不明です。 – Bergi

関連する問題