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, (^^ゞ