現在の Websocket RFC では、送信時にフレーム内でwebsocket クライアントがすべてのデータをマスクする が必要です(ただし、サーバーは必須ではありません)。 理由 このようにプロトコルが設計されたのは、フレームデータがクライアントとサーバー(プロキシなど)間の悪意のあるサービスによって変更されるのを防ぐためです。ただし、マスキングキーはまだそのようなサービスで認識されています(各フレームの先頭でフレームごとに送信されます)。
フレームを次のポイントに渡す前に、そのようなサービスがキーを使用してコンテンツのマスクを解除、変更、および再マスクできると仮定するのは間違っていますか?私が間違っていない場合、これはどのように想定される脆弱性を修正しますか?
セクション RFCの10. は、マスキングが必要な理由を正確に説明しています。これは、特定のハッキング手法に対する非常に具体的な対応です。それが対処しようとしている問題は、2010年の論文 Talking Yourself to Fun and Profit と呼ばれる最も鋭いインターネットトランスポートセキュリティ関係者。
クライアントからサーバーへのマスキングは、プロキシがWebSocketsデータをキャッシュ可能なHTTPリクエストとして意図せずに処理するのを防ぐために、Websocketプロトコルで使用されます。あなたがそれが愚かなプロキシにうろついているのか(そして私はそうだと思う)議論することができますが、それが理由です。
SSL/TLSを介したwss://
別名WebSocketでは、マスキングは役に立ちません。可能な限りSSL/TLSを使用することが推奨されているため、マスキングは限界的なユースケースをカバーしていると合理的に結論付けることができます。