Hello there, ('ω')ノ
🧨 本質的な問題
「ユーザーはWeb画面の通りにしか操作しない」 「クライアント側のチェックがあるから大丈夫」
このような前提で設計されたシステムは攻撃者には無力です。
🔍 どんな攻撃が可能になるのか?
攻撃者は ブラウザではなく Burp Suite 等のプロキシツールを使い、
- JavaScriptの制御を無視
- 画面にない値も送信
- UIでは禁止された操作も実行
ができます。
🎯 実際の被害例
脆弱な制御 | 攻撃手法 | 想定される影響 |
---|---|---|
購入価格が画面で固定表示されている | Burpでリクエスト中のpriceパラメータを0に書き換える | 商品を無料で購入できてしまう |
JavaScriptで数量上限が10に制限されている | リクエストのquantity=999に書き換える | 過剰注文が成立、在庫崩壊 |
管理者専用ボタンがUI上に非表示 | リクエストを直接再現し送信 | 管理者機能が誰でも使える状態に |
🧠 攻撃者の行動パターン
- ページのHTMLやJavaScriptを確認(隠された値、上限、条件などを調査)
- 実際の通信をBurpでキャプチャし、意図的に値を改変
- サーバーがその値を無検証で処理していたら脆弱性確定!
✅ 防御の鉄則
防御策 | 解説 |
---|---|
サーバー側で全ての値を検証 | 金額、ロール、ステータスなど一切の信用をおかない |
クライアント側は「利便性」、サーバー側は「防御」 | JSによる入力制御はUX改善のためであって、セキュリティ対策ではない |
許容値リスト(ホワイトリスト)を使う | 数量や金額は予め定義された値のみ受け入れる |
✅ まとめ
- クライアント側の検証は信用してはならない
- 攻撃者は画面を使わず通信内容を直接操作
- 全ての検証・制御はサーバーで実施すべき
Best regards, (^^ゞ