Shikata Ga Nai

Private? There is no such things.

パラメータベースのアクセス制御の危険性:改ざんによる権限昇格

Hello there, ('ω')ノ

✅ 仕組みの説明

一部のWebアプリケーションでは、ログイン後にユーザーの役割(role)や権限をパラメータとして保持し、それをもとにアクセス制御を行う設計になっています。

例として、次のような仕組みです:

  • ログイン時に role=1 を付けたURLを発行
  • それをもとに「管理者」か「一般ユーザー」かを判定する

🔓 問題のある例

https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1

📌 意図された動作

  • admin=false → 一般ユーザー
  • admin=true → 管理者機能にアクセス可能

🧨 なぜ危険なのか?

このような実装では、パラメータはユーザーが自由に改ざん可能です。

つまり、次のように簡単に書き換えが可能です:

https://insecure-website.com/login/home.jsp?admin=true

→ 本来「一般ユーザー」であるはずのユーザーが、自分でadmin=trueに書き換えるだけで管理者権限を得られてしまう


🛡 対策方法

正しい実装 内容
✅ 権限情報をサーバー側で一元管理 セッションやJWTなどで安全に管理する
✅ クライアントにロール情報を渡さない HTML・Cookie・パラメータなどに含めない
✅ サーバー側で必ず再検証する if (session.role != 'admin') return 403; など

✅ まとめ

アクセス権限をパラメータで管理する設計は極めて危険です。

  • クライアント側のパラメータは誰でも変更可能
  • その値に基づいてアクセス制御を行うと、簡単に権限昇格される

Best regards, (^^ゞ