WebSocket仕様の古くて置き換えられたドラフト75は、HTTPリクエストヘッダーSec-WebSocket-Key1およびSec-WebSocket-Key2を指定していません。最新のドラフトにこれらが含まれているのはなぜですか。また、セキュリティの強化に関してはどうでしょうか。
1 に答える
私が理解できることは次のとおりです。これらの新しいフィールドは、クロスプロトコル攻撃を防ぐために存在します。悪意のある JavaScript が Web ブラウザーで実行されており、非 HTTP、非 WebSocket サーバー (FTP、telnet、SSH など) に接続しようとしているとします。ドラフト 75 では、ハンドシェイクはクライアントが WebSocket ハンドシェイク ヘッダーを送信し、サーバーが何も応答しないだけで構成されていました。その後、クライアントは\x00...\xFF
フレーム化されたメッセージを送信できます。したがって、クライアントの悪意のある JavaScript コードは、WebSocket 以外のサーバー (telnet など) に接続し、そこでログインしてコマンドを実行しようとする可能性があります。Sec-WebSocket-Key1が導入された後、サーバーがSec-WebSocket-Key1の MD5 チェックサムを返さない限り、WebSocket 接続の試行は失敗します。特に JavaScript コードはSec-WebSocket-Key1などを制御できないため、WebSocket 以外の (telnet などの) サーバーにそれを強制することはほとんど不可能です。