Shikata Ga Nai

Private? There is no such things.

クライアント側の制御を信頼する危険性:裏で改ざんされるとどうなる?

Hello there, ('ω')ノ

🧨 本質的な問題

「ユーザーはWeb画面の通りにしか操作しない」 「クライアント側のチェックがあるから大丈夫」

このような前提で設計されたシステムは攻撃者には無力です。


🔍 どんな攻撃が可能になるのか?

攻撃者は ブラウザではなく Burp Suite 等のプロキシツールを使い、

  1. JavaScriptの制御を無視
  2. 画面にない値も送信
  3. UIでは禁止された操作も実行

ができます。


🎯 実際の被害例

脆弱な制御 攻撃手法 想定される影響
購入価格が画面で固定表示されている Burpでリクエスト中のpriceパラメータを0に書き換える 商品を無料で購入できてしまう
JavaScriptで数量上限が10に制限されている リクエストのquantity=999に書き換える 過剰注文が成立、在庫崩壊
管理者専用ボタンがUI上に非表示 リクエストを直接再現し送信 管理者機能が誰でも使える状態に

🧠 攻撃者の行動パターン

  1. ページのHTMLやJavaScriptを確認(隠された値、上限、条件などを調査)
  2. 実際の通信をBurpでキャプチャし、意図的に値を改変
  3. サーバーがその値を無検証で処理していたら脆弱性確定!

✅ 防御の鉄則

防御策 解説
サーバー側で全ての値を検証 金額、ロール、ステータスなど一切の信用をおかない
クライアント側は「利便性」、サーバー側は「防御」 JSによる入力制御はUX改善のためであって、セキュリティ対策ではない
許容値リスト(ホワイトリスト)を使う 数量や金額は予め定義された値のみ受け入れる

✅ まとめ

  • クライアント側の検証は信用してはならない
  • 攻撃者は画面を使わず通信内容を直接操作
  • 全ての検証・制御はサーバーで実施すべき

Best regards, (^^ゞ