本文へスキップ
>_ITDITDセキュリティ対策プラットフォーム

用語辞典

IDORとは — IDを書き換えるだけで他人のデータが見えてしまう穴

IDOR(Insecure Direct Object Reference/アクセス制御不備)は、URLやパラメータのIDを書き換えるだけで、本来見られないはずの他人のデータにアクセスできてしまう脆弱性です。仕組みの図解と、本命の防御(サーバー側で“この利用者がこの対象を見てよいか”を毎回確認)を防御目線で解説します。

公開日 2026-06-10 更新日 2026-06-10 4分で読める

「URLの id=124125 に変えたら、他人の請求書が表示された」——それがIDOR(アクセス制御不備)です。仕組みと確実な防ぎ方を解説します(攻撃手順は載せません)。

なぜ起きるか

「認証(誰か)」は通っているのに、「認可(その人がこれを操作してよいか)」が抜けていると発生します。認証と認可は別物で、ログインできること=そのデータを見てよいこと、ではありません。

よくある抜け結果
ログイン後はIDをそのまま信用他人のIDに書き換えれば素通り
画面に出さない=安全と誤解APIを直接叩かれると無防備
作成/更新/削除に権限チェック無し閲覧だけでなく改ざん・削除まで可能

なぜ成立するか(仕組み)

利用者Aがログイン → 自分の請求書 /invoice?id=124
id を 125(利用者Bの物)に書き換える
↓ サーバーは「125は存在する」しか見ない
所有者チェックが無いので、他人の請求書が表示される
IDの“形”だけ見て所有者を確認しないと、自分のIDを他人のIDに変えるだけで通ってしまう。

防御:サーバー側で「所有者・権限」を毎回確認

1

対象ごとに所有者・権限をチェック(最重要)

データを返す/変更する直前に、「ログイン中の利用者IDが、その対象の所有者か・操作権限を持つか」をサーバー側で必ず照合。満たさなければ拒否。

2

既定で拒否(deny by default)

新しいエンドポイントは「明示的に許可した条件以外すべて拒否」を初期状態に。チェックの付け忘れが“通る”側に倒れないようにする。

3

“自分の物”だけを問い合わせる

クエリ自体に所有者条件を含める(例:利用者ID=本人 で絞る)。アプリ全体で共通の認可ヘルパに通し、各所での書き忘れを無くす。

4

画面制御を防御と勘違いしない

ボタンを隠す/出さないはUXであって防御ではない。APIは直接叩かれる前提で、サーバー側でだけ判断する。ランダムIDは補助に留める。

当サイトの視点:派手さは無いが、被害は最大級。テストで“見張る”

IDORは技術的に地味で、コードレビューでも見落とされがちです。しかし「ワンクリックで他人の個人情報が全件見える」ような被害規模は最大級。だからこそ、「別ユーザーで他人のIDを叩いたら403になるか」を自動テストに固定化するのが実戦的です。当サイトは「クライアント側の見た目で守らない/サーバー側でだけ判断する」を原則にしています。認可は“仕組みで毎回効かせる”もので、人の注意力に頼らないのが肝です。

次に読む

よくある質問

QIDORで何が起きる?
A

ログイン済みの利用者が、URLやAPIのID(?id=124 など)を別の値に書き換えるだけで、他人の請求書・注文・個人情報・ファイルなどを閲覧・変更・削除できてしまいます。OWASPでも最も多い問題群(アクセス制御の不備)の代表で、特別な道具がなくても起きるのが怖い点です。

Q一番の防御は?
A

『サーバー側で毎回、“このログイン中の利用者が、この対象を操作してよいか”を確認する』ことです。IDが正しい形でも、それが本人の所有物か・権限があるかを必ずチェックし、無ければ拒否(既定で拒否)。クライアント側の画面制御だけに頼ってはいけません。

QIDをUUIDやランダムにすれば防げる?
A

それは“推測されにくくする”だけで、根本対策ではありません。IDが漏れたり共有されたりすれば素通りします。ランダム化は補助に留め、本命は必ずサーバー側の所有者・権限チェックにします。