WebSocketでの平文送信

WebSocketでの平文送信

説明

ws:// によるWebSocket接続では、通信内容が暗号化されず平文で送られます。WebSocket コンストラクターは http:// のURLも ws:// に変換するため、同じリスクがあります。通信経路上の攻撃者が機密情報を盗み見たり、メッセージを改ざんしたりするおそれがあります。

想定される影響

  • 通信経路上の攻撃者に、暗号化されていない認証情報、セッショントークン、その他の機密データを取得される可能性があります。
  • メッセージの改ざんによって、データの完全性やサービスへの信頼が損なわれるおそれがあります。

対処方法

  • WebSocket接続には wss:// または https:// のURLを使ってください。WebSocket コンストラクターは https:// を wss:// に変換します。
  • TLS証明書を適切に設定し、維持してください。
  • 平文接続は localhost、127.0.0.1、[::1] などのローカルループバックの開発環境に限定し、本番環境では暗号化した接続だけを許可してください。

例

変更前

javascript
// 平文のWebSocket接続
var ws = new WebSocket('ws://myapp.example.com/socket');
ws.onmessage = function(msg) {
    console.log(msg.data);
}

変更後

javascript
// TLSによるWebSocket(wss)を使用
var ws = new WebSocket('wss://myapp.example.com/socket');
ws.onmessage = function(msg) {
    console.log(msg.data);
}

解説:

  • 変更前: ws:// または http:// で始まるコンストラクターURLは平文接続になり、通信経路上で盗聴や改ざんを受ける可能性があります。
  • 変更後: wss:// または https:// で始まるURLはTLSを使い、通信中のデータを保護します。

参考資料