web-dev-qa-db-ja.com

ウェブソケットは安全ですか?

wikipediawebsocketsは安全であると推測されます:

Webブラウザをサポートするために、WebSocketプロトコルの安全なバージョンがFirefox 6(MozWebSocketという名前)、[2] Google Chrome 14 [3]およびInternet Explorer 10開発者プレビューで実装されています。既知のエクスプロイトはありませんが、Firefox 4および5では無効にされていました...

しかし w は安全でないと述べています:

ここでHTTP手順に従うと、Webブラウザーのコンテキストで深刻なセキュリティ問題が発生する可能性があります。たとえば、あるパスにWebSocketサーバーがあり、別のパスにHTTPリダイレクタが開いているホストを考えます。突然、特定のWebSocket URLを与えることができるスクリプトは、URLが正しいホスト名を持っていることをスクリプトがチェックしたとしても、インターネット上の任意のホストと通信する(そして潜在的に秘密を共有する)ようにだまされる可能性があります。
  1. http websockets(ws :)安全かどうか?

  2. https websockets(wss :)安全かどうか?

  3. #2ではない場合、予防措置が文書化されていますか?

44
cc young

WebSocketセキュリティにはさまざまな側面があります。

引用したウィキペディアの抜粋は、WebSocketクライアントからサーバーデータへのマスキングを参照しています。これは、WebSocketトラフィックを誤って通常のHTTPトラフィックとして解釈することから、不正な動作を行う仲介者(プロキシやキャッシュなど)を保護するためです。ここで危険なのは、WebSocketsプロトコルを使用してキャッシング仲介を汚染する可能性があることです。ただし、これは純粋に理論的な懸念事項でしたが、MozillaおよびOperaはWebSocketプロトコルのHixieおよび初期のHyBiバージョンを出荷することに消極的だったという懸念は十分でした。 IETFは、懸念事項に対処するために、データのクライアントマスキングをサーバーに追加することを決定しました。

余談ですが、IETFはWebSocketプロトコル(IETF 6455)を担当し、W3CはHTML5 WebSocket API(Javascriptオブジェクト、メソッド、イベント)を担当します。

WebSocketセキュリティのもう1つの側面は、クロスオリジンセキュリティです。 W3C WebSocket API仕様から引用した2番目のスニペットは、クロスオリジンセキュリティに関連しています。 WebSocketは、(HTMLページが提供された別のホストへの)クロスオリジン接続をサポートします。この警告は、if通常のHTTPクロスオリジンプロシージャがWebSocketに使用されていたため、大きなセキュリティホールが開くと言っています。ただし、WebSocketプロシージャはまさにこの理由で異なります。 1つには、WebSocketハンドシェイクと応答は、WebSocket接続をサポートしないHTTPサーバーへのWebSocket接続ができないように設計されています。サーバーはWebSocket固有の方法でキーに署名/ハッシュし、ハンドシェイク応答でこれを返す必要があります。 2番目の部分は、ブラウザーがハンドシェイクの一部としてOriginヘッダーを送信する必要があることです(これは、HTML/Javascriptが最初にロードされた場所を示します)。これにより、サーバーはWebSocket接続を許可するoriginateドメインを選択できます。

最後に、非暗号化(ws://)と暗号化(wss://)の2つのWebSocket接続モードがあります。暗号化モードでは、TLS/SSL暗号化を使用して、サーバーとの間で送受信されるすべてのデータ(最初のハンドシェイクと応答を含む)を暗号化します。これは、HTTPS接続に使用されるものと同じ暗号化メカニズムです(ブラウザーで同じ暗号化エンジンを使用します)。これにより、第三者が転送中のデータを盗聴するのを防ぎます。

知っておく価値のあるWebSocketプロトコルには、実際には2つのバージョンしかありません。

  • Hixie76:このバージョンのプロトコルでは、クロスオリジンセキュリティとヘッダーハッシュ/署名が追加されました。ただし、プロトコルの設計方法により、既存のWebサーバーにサポートを追加することは困難です。これは現在iOSでサポートされているバージョンです(iOS 6が最終的にIETF 6455に更新されることを願っています)

  • IETF 6455:これは、昨年11月(2011年11月)にIETFによって標準化されたWebSocketプロトコルのバージョンです。 IETF HyBiワーキンググループによる作業の集大成でした(それに至るまでのプロトコルの反復にはHyBi XXというラベルが付けられていました)。これは、ChromeとFirefoxの現在のバージョン、およびIE 10およびまもなくOpera。

73
kanaka

WebSocketプロトコルのバージョンhixie-76は以前のバージョンよりも安全であり、バージョンhybi-07はさらに安全です。 hixie-76バージョンでは 偽のリクエストに対する保護 が追加されています。 hybi-07バージョンでは message masking が追加されています。

12
Denis Ibaev