Insecure Direct Object References — IDOR — is one of the most consistently exploited vulnerabilities on the web today. It consistently ranks under OWASP A01: Broken Access Control, the number one category in the OWASP Top 10 (2021). Despite being decades old and well understood, IDOR appears in everything from government portals to Fortune 500 applications. The reason is simple: it is easy to introduce and difficult to detect without systematic testing.

What Is IDOR?

IDOR occurs when an application exposes a direct reference to an internal object — a database row, a file, a user record — and fails to verify that the requesting user is authorised to access it. The "direct reference" is typically something visible in the URL or request body: a numeric ID, a sequential order number, a UUID, or a filename.

Consider this URL: https://app.example.com/invoices/download?id=1042

If the server returns invoice 1042 to anyone who requests it — without checking whether the logged-in user owns that invoice — this is a classic IDOR vulnerability. An attacker who has access to their own invoice at ID 1043 can trivially try 1042, 1041, 1040, and so on, downloading invoices belonging to other customers.

Why IDOR Is Dangerous

The severity of an IDOR vulnerability scales with what is behind the reference:

The 2020 breach at a major parking platform exposed 21 million user records because vehicle registration lookups were protected by sequential integers in the URL. An attacker enumerated IDs in sequence and retrieved the full database. This is a textbook IDOR attack, and it is not unusual.

Types of IDOR

URL Parameter IDOR

The most visible form: the object reference appears directly in the URL. /profile?user_id=5823, /order/98712/details, /download?file=report_2024_q3.pdf. Changing the parameter retrieves a different object. If the server does not verify ownership, any object is accessible.

Body Parameter IDOR

The reference appears in a POST body or JSON payload rather than the URL. A form that submits {"account_id": 5823, "action": "update_email"} is equally vulnerable if the server does not verify that account 5823 belongs to the authenticated user.

Cookie or Header IDOR

Some applications store the user ID in a cookie or custom header and use it server-side to look up the user's data. If that value is not cryptographically bound to the session, an attacker can simply replace it with another user's ID.

Indirect IDOR via Predictable References

Sequential integers are obvious candidates for enumeration, but predictable non-integer references are equally exploitable: timestamps used as filenames, sequential order numbers with a fixed prefix, or hashed identifiers created from predictable inputs (MD5 of an email address, for example) can all be enumerated or guessed.

Why IDOR Is So Common

Developers are trained to think about authentication — verifying who you are — but authorisation — what you are allowed to do — is often treated as an afterthought. When a feature is built, the developer checks that the user is logged in and then retrieves the requested object by its ID. The check "does this user own this object?" is the step that gets skipped, especially under time pressure or in legacy codebases where access control was not part of the original design.

Frameworks and ORMs make retrieving objects by ID trivially easy. They do not automatically add ownership checks. That responsibility remains with the developer, and it is easy to miss in code review because the vulnerability is not in any single line of code — it is in the absence of a line.

How Shieldome Detects IDOR Indicators

Pure IDOR requires authenticated session context and knowledge of valid object IDs to confirm — it is inherently an application-layer vulnerability that varies by codebase. However, Shieldome surfaces several indicators that dramatically increase the likelihood of IDOR being present:

Every IDOR-related finding in a Shieldome report is classified under OWASP A01: Broken Access Control and includes the specific URL pattern and remediation recommendation.

How to Fix IDOR

The fix for IDOR is consistently the same regardless of where it appears: always verify object ownership on the server side, never trust the client-supplied reference alone.

Frequently Asked Questions

Is IDOR the same as broken access control?

IDOR is a specific type of broken access control. Broken access control (OWASP A01) is the broader category covering any case where a user can perform actions or access data they should not be authorised for. IDOR is the specific pattern where the vulnerability is triggered by manipulating a direct reference to an object — typically an ID in a URL or request body. Other broken access control patterns include privilege escalation via role manipulation and forced browsing to restricted pages.

Does HTTPS prevent IDOR?

No. HTTPS encrypts the connection between client and server, preventing eavesdropping. It does nothing to prevent an authenticated user from manipulating request parameters to access other users' data. IDOR is an application-layer vulnerability; HTTPS is a transport-layer control. Both are necessary and independent of each other.

Can a WAF block IDOR attacks?

Generally no. Web Application Firewalls work well against injection attacks with identifiable malicious payloads. An IDOR attack looks like a normal authenticated request — the only difference is the ID value. A WAF cannot know which ID values are owned by which users. Proper server-side authorisation checks are the only reliable defence.

Are UUIDs sufficient to prevent IDOR?

UUIDs make guessing impractical but do not eliminate IDOR. If an attacker obtains a UUID they should not have — through a shared link, a log entry, or another vulnerability — and the server does not check ownership, they can still access the resource. UUIDs reduce enumeration risk; authorisation checks eliminate the underlying vulnerability.

How does Shieldome help me find IDOR before attackers do?

Shieldome automatically crawls your site, identifies URL patterns with sequential or predictable object references, and flags them as access control risk indicators in your report. It also checks whether sensitive routes return data without authentication. These findings point your development team to the routes most likely to contain IDOR vulnerabilities, so manual verification can focus where it matters most. Run a free scan today to see what Shieldome finds on your site.