Home / Knowledge hub / IDOR testing
Knowledge hub
IDOR testing
Swapping record ids between two accounts to see whether the app notices.
What it means
IDOR testing is the check for insecure direct object references. A tester takes a request that fetches or changes a record, such as GET /invoices/1042, and replays it with an id that belongs to someone else, or with another account's session, to see whether the app notices.
The core of the method is two accounts. Account A owns records, account B is a different customer. If B can read or change A's records, the app has a flaw. If the app answers with a denial, it passed that case.
Why it matters
It is the easiest way to prove cross-customer exposure, and the results are plain: a screenshot of one account showing another account's data. That helps a team agree on severity, and it is the kind of evidence a customer or auditor trusts.
Automated scanners usually miss these flaws, because they cannot tell whose data they are looking at. A manual or logic-aware test is needed, repeated whenever endpoints change, since a new route is a new chance to forget the check. Re-run it whenever a release adds routes.
How it shows up
The test touches every place an id appears: path segments, query strings, request bodies, headers, cookies, GraphQL variables and file download links. Also try each method on the same path, since GET may be guarded while PUT and DELETE are not.
Good testers also look for ids in other places than the obvious one: a list that reveals them, an email link, an export. They test numeric, UUID and encoded ids, and ids in nested objects. A pass means the server refuses for all of these. A fix is a server-side ownership check on every lookup.
Questions people ask
IDOR testing, answered
How many accounts do I need to test IDOR?
At least two ordinary accounts in different organisations, and one privileged account if roles exist. With only one account you can see what is yours but not whether you can see anything else.
Can automated tools do IDOR testing?
Some help by replaying requests with swapped ids, but they need to be told which account owns what. Without that context they report too much or too little.
Do UUIDs prevent IDOR?
No. They make guessing impractical but do not stop access if someone obtains a valid one. The check must be on ownership.
What is the difference between IDOR and BOLA?
The same weakness under two names. IDOR is the older web term, and BOLA is the term used in the OWASP API list.
What should a good report include?
The two accounts, the request, the response showing the other account's data, and the line of code or route that skipped the check. Evidence is what separates a finding from a guess.
Related
Terms that sit next to this one
IDOR
Changing an id in a request and getting back someone else's record.
BOLA
An API returns a record just because you asked for it by number.
Cross-account access
One signed-in account reaching another account's data or functions.
Ownership check
Confirming that the record being requested belongs to the account asking for it.
Unguessable ids
Using long random ids instead of counters, which hides records but does not protect them.
Does the app notice a swapped id?
We test your endpoints with separate accounts and swapped identifiers, and each finding comes with the request, the response and a screenshot. Ask us to run it on one of your applications.
Or start with a $199 pilot on one application: thirty days, success criteria agreed before day one, credited against the annual if you convert.