WebSocketフレーム内のマスクとは何ですか?
質問
ウェブソケットの実装に取り組んでいますが、フレーム内のマスクの意味がわかりません。
誰か、それが何をするのか、なぜそれが推奨されるのかを説明していただけませんか?
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
どのように解決するのですか?
WebsocketはRFC6455で定義されており、その中で次のように述べられています。 セクション5.3 :
マスキング・キーの予測不可能性は 悪意のあるアプリケーションの作者が、電線に表示されるバイトを選択できないようにするために不可欠です。 を選択することを防ぐために不可欠です。
での ブログのエントリで という説明を見つけました。
masking-key (32 bits): マスクビットが設定されている場合(サーバー側で書いていればそうなります)、ここでペイロードのxorに使われる符号なしバイトを読み込むことができます。 これは、くだらないプロキシがクライアント側からの攻撃者によって悪用されないようにするために使用されます。 .
しかし、私が見つけた最も明確な答えは メーリングリストアーカイブ . そこではJohn Tamplinがこう述べています。
基本的に、WebSocket は、クライアントで敵対的なコードが実行されていても、ネットワークとインフラを保護する必要があるという点でユニークです。 クライアントで敵対的なコードが実行され、サーバーが完全に敵対的に制御されたとしても、ネットワーク インフラストラクチャを保護する必要があるという点でWebSocketはユニークです。 サーバーを完全に敵対的に制御し、信頼できるのはクライアント ブラウザだけである場合でも、ネットワーク インフラストラクチャを保護する必要があるという点で、WebSocket はユニークです。 クライアントブラウザです。 ブラウザがフレームごとにランダムなマスクを生成することで、敵対的なクライアントコードは フレームごとにランダムなマスクを生成させることで、敵対的なクライアントコードは、ワイヤー上に現れるバイトパターンを選択できず それを使って脆弱なネットワーク インフラストラクチャを攻撃することはできません。 .
kmkaplan が述べているように、攻撃ベクトルは
セクション 10.3
に記載されています。
これは、プロキシキャッシュポイズニング攻撃を防ぐための対策で
1
.
これは、いくつかのランダム性を作成することです。ペイロードをランダムなマスキングキーとXORする必要があります。
ところで。これは単に推奨されているわけではありません。それは 義務です。 .
1: 参照 Huang, Lin-Shung, et al. "Talking to yourself for fun and profit." Proceedings of W2SP (2011)
関連
-
[解決済み] TCP ACKされた未視聴セグメント] [TCP前のセグメントをキャプチャしていない]を理解する。
-
[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?
-
[解決済み] コネクション・リセット・バイ・ピア」とはどういう意味ですか?
-
[解決済み] IPv4で許容される最大のTCP/IPネットワークポート番号は何番ですか?
-
[解決済み] WebSocketとピュアTCPの根本的な違いは何ですか?
-
[解決済み] IPv6でポートはどのように機能するのですか?
-
[解決済み] WebSocketsのピン/ポン、なぜTCPキープアライブではないのですか?
-
[解決済み] WebRTCはTCPとUDPのどちらを使用するのですか?
-
[解決済み] TCPとUDPの実生活での使用例とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン