75

私は 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 ...                |
 +---------------------------------------------------------------+
4

3 に答える 3

77

Websocket は RFC6455 で定義されており、セクション 5.3で次のように述べられています。

マスキング キーの予測不可能性は、悪意のあるアプリケーションの作成者がネットワーク上に表示されるバイトを選択できないようにするために不可欠です。

Websockets に関するブログ エントリで、次の説明を見つけました。

masking-key (32 ビット): マスク ビットが設定されている場合 (そして、私を信じてください。サーバー側で記述した場合です)、ペイロードの xor に使用される符号なしバイトをここで読み取ることができます。これは、クライアント側からの攻撃者がくだらないプロキシを悪用できないようにするために使用されます

しかし、メーリングリストのアーカイブで見つけた最も明確な答えは. そこでジョン・タンプリンは次のように述べています。

基本的に、WebSocket はネットワーク インフラストラクチャを保護する必要があるという点で独特です。たとえクライアントで敵対的なコードが実行されていても、サーバーを完全に敵対的に制御していても、信頼できるのはクライアント ブラウザーだけです。 ブラウザーがフレームごとにランダム マスクを生成することで、敵対的なクライアント コードはネットワーク上に現れるバイト パターンを選択し、それを使用して脆弱なネットワーク インフラストラクチャを攻撃することができなくなります

kmkaplan が述べたように、攻撃ベクトルはRFC のセクション 10.3に記載されています。
これは、プロキシ キャッシュ ポイズニング攻撃を防ぐための措置です1。それが行うことは、ランダム性を作成することです。ランダムマスキングキーでペイロードを XOR する必要があります。

ちなみに、ただ推奨されているわけではありません。必須です。

1: Huang、Lin-Shung などを参照。「楽しみと利益のために独り言を言う。」W2SP 議事録 (2011)

于 2013-01-05T17:30:29.037 に答える