Hello there, ('ω')ノ
🎯 1. WebSocketとは?
WebSocket は、HTTPのようなリクエスト/レスポンス型通信とは異なり、 ブラウザとサーバ間で双方向の通信を常時維持するプロトコルです。
ws://
またはwss://
(セキュア) で始まり、チャット・ゲーム・株価などリアルタイム通信に多く使われます。
⚠️ 2. WebSocketのセキュリティリスク
リスク | 内容 |
---|---|
🔐 認証・認可の不備 | ログインしていないのに接続できる/他ユーザのデータが取得可能 |
🧨 メッセージ改ざん・送信 | 本来許されない操作を送信できてしまう |
🕵️♂️ 情報漏洩 | 意図しない情報を受信できる(チャット、ログなど) |
🔄 セッション継続の欠如 | ログアウト後も接続が切れない/認可が更新されない |
🧭 3. チェックすべきアプリ機能
機能 | 備考 |
---|---|
💬 チャット | 他ユーザへの送信・読み取り |
📊 リアルタイム通知 | 通知先の切り替え、意図しない対象への送信 |
🕹️ ゲーム・操作反映 | 他プレイヤーのアクションを再現できるか |
🧾 ログ配信 | 管理者向けログが誰にでも配信されないか |
🛠️ 4. 診断手順(基本)
- ブラウザの DevTools(F12)→ Network → WS タブ を開く
- WebSocket接続(
ws://
やwss://
)を探す - 送受信されるメッセージ内容を記録
- Burp Suiteや拡張でメッセージを再送・改変
- 想定外の操作やレスポンスが返るか確認
🧪 5. テストメッセージ例
📤 メッセージ改ざん(送信側)
{ "action": "deleteUser", "user_id": "2" }
→ 本来管理者しかできない操作が通ってしまうか?
📥 情報漏洩(受信側)
{ "from_user": "admin", "message": "秘密の通知内容" }
→ 一般ユーザでも受信できるか?
🔍 6. 確認ポイント
チェック | 確認方法 |
---|---|
🔐 認証は適切か? | 認証なしでもWebSocket接続が確立する? |
🧾 接続後の認可はあるか? | ユーザAで接続し、ユーザBの情報が届く? |
🔄 ログアウト後に切断されるか? | 接続が継続したまま?再利用できる? |
🧪 JSONの中身は検証されているか? | action , user_id , message などを変更して不正操作できる? |
🧰 7. 診断ツール
ツール | 用途 |
---|---|
Burp Suite(Extender → WebSockets) | 通信の観察・改変 |
Browser DevTools(F12 → WSタブ) | 通信内容のリアルタイム確認 |
wscat(CLIツール) | 手動でWebSocket通信を送信・受信できる |
WebSocket King Client(Chrome拡張) | GUIで使えるWebSocketクライアント |
🧱 8. 安全なWebSocket設計のポイント(診断時のチェック)
対策 | 内容 |
---|---|
HTTPS + WSS の使用 | 常に暗号化された通信を利用(wss:// ) |
トークン・セッションチェック | 接続時に認証トークンの検証があるか |
メッセージごとの認可チェック | すべての操作がユーザの権限内で行われているか |
サーバ側での入力検証 | user_id , action , data などを信用せず検証すること |
✅ 診断チェックリスト(簡易版)
チェック項目 | OK | 脆弱(❌) |
---|---|---|
認証なしでは接続できない | ✅ | ❌ |
接続時にユーザのセッションが正しく反映される | ✅ | ❌ |
他人のメッセージを送信・受信できない | ✅ | ❌ |
不正な操作(削除など)を送っても拒否される | ✅ | ❌ |
📌 見つけやすいヒント
- URLに
/ws
,/socket
,/stream
などが含まれる WebSocket
,new WebSocket(...)
の記述がJS内にある- 接続後に継続的にデータがやり取りされている様子
Best regards, (^^ゞ