説明
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を使い、通信中のデータを保護します。