Глоссарий

Что такое IDOR: уязвимость, раскрывающая чужие данные при изменении идентификатора

IDOR позволяет изменить идентификатор в URL и получить чужие данные. Основная защита — на сервере при каждом запросе проверять права пользователя на объект.

Опубликовано 2026-06-10 Обновлено 2026-10-06 6 мин чтения
На этой странице

IDOR (нарушение контроля доступа) — это когда замена id=124 на 125 в URL показывает чужой счёт. Разберём, как он работает и как надёжно его предотвратить (без шагов атаки).

Почему это случается

Аутентификация (кто вы) проходит, а авторизация (можно ли вам это делать?) отсутствует. Аутентификация и авторизация — разные вещи: возможность войти не означает разрешения видеть эти данные.

Частый пробелРезультат
Доверие идентификатору как есть после входаПодмените на чужой идентификатор — и доступ будет получен
Ошибка «не показано в UI = безопасно»Прямое обращение к API ничем не блокируется
Нет проверки прав на создание/обновление/удалениеНе только просмотр — ещё подмена и удаление

Почему это работает

Пользователь A входит → его счёт /invoice?id=124
меняет id на 125 (пользователя B)
↓ сервер проверяет только «125 существует»
нет проверки владения, поэтому показывается счёт B
Проверяйте только «форму» идентификатора без проверки владения — и смена вашего идентификатора на чужой просто срабатывает.

Идентификаторы встречаются не только как ?id= в URL. Пути API (/api/orders/125), тела JSON ("userId": 125), URL скачивания файлов и скрытые поля форм требуют той же проверки — везде, где значение, присланное пользователем, выбирает, с каким объектом работать.

Смежные термины

IDOR — одна из форм нарушения контроля доступа. У него несколько названий, и его легко спутать с соседями.

ТерминЧего не хватаетПример
IDORПроверки владения/разрешения для каждого объектаПользователь A меняет идентификатор и видит счёт пользователя B
BOLAТо же, что IDOR (название в OWASP API Security)/orders/{id} в API возвращает чужой заказ
Ошибка авторизации на уровне функцийПроверки прав для каждой функцииОбычный пользователь может вызвать API только для администраторов
Нарушение аутентификацииСамой проверки «кто вы»API можно вызвать без входа

В OWASP Top 10 нарушение контроля доступа (A01) стоит на первом месте в редакции 2025 года, как и в 2021-м. В OWASP API Security Top 10 (2023), посвящённом API, BOLA тоже на первом месте (API1:2023).

Реальные случаи: чужие данные видны после входа

Два случая в государственном секторе, разобранные на этом сайте, официально объяснили дефектами, внесёнными при обновлении систем, но по результату они устроены так же, как ошибка авторизации: вошедший пользователь мог добраться до чужих данных.

  • Companies House, Великобритания (март 2026 г.): пользователи, вошедшие в WebFiling, могли при определённых действиях потенциально видеть домашние адреса и другие сведения директоров других компаний, а несанкционированная подача документов была технически возможна. Ведомство говорит, что это дефект, внесённый обновлением системы в октябре 2025 года, а не внешняя атака → подробный разбор (на английском)
  • e-Tax Национального налогового агентства Японии (сентябрь 2026 г.): дефект после обновления «Моей страницы» позволил другим пользователям просматривать декларации по налогу на дарение и связанные документы 79 человек → подробный разбор (на английском)

В обоих случаях проверка входа работала. Не хватало проверки «может ли этот пользователь действовать с этим объектом?». И оба случились после изменения. Даже правильно сделанная система может потерять проверку при добавлении функции — поэтому автоматический тест, который запускается каждый раз, того стоит.

Защита: проверяйте владение/разрешение на сервере, каждый раз

1

Проверяйте владение/разрешение для каждого объекта (самое важное)

Прямо перед возвратом или изменением данных проверяйте на сервере, что вошедший пользователь владеет этим объектом или имеет на него разрешение. Отказывайте, если нет.

2

Запрет по умолчанию

Новые эндпоинты начинаются с «запрещать всё, кроме того, что явно разрешено», чтобы забытая проверка давала отказ, а не открытый доступ.

3

Запрашивайте только «свои» строки

Встраивайте условие владельца в сам запрос (например, фильтр по id текущего пользователя). Пропускайте всё через один общий помощник авторизации, чтобы ни одно место вызова о нём не забыло.

4

Не путайте контроль в UI с защитой

Скрытие кнопки — это UX, а не безопасность. Считайте, что API вызывают напрямую, и решайте только на сервере. Держите случайные идентификаторы как вспомогательное средство, а не как механизм контроля.

Как проверить своё приложение

Делайте это только в приложении, которое вы разрабатываете или которым управляете. Попытка сделать это на чужом сервисе может быть неправомерным доступом.

  1. Создайте тестовых пользователей A и B и дайте каждому по записи (заказ, файл и т. п.)
  2. Войдя как A, вызовите API просмотра, изменения и удаления с идентификатором, указывающим на запись B. Вызывайте API напрямую из инструментов разработчика или API-клиента, а не через UI
  3. Убедитесь, что каждый запрос отклоняется с 403 или 404. Проверьте также, что эндпоинты списков не включают записи B
  4. Превратите это в автоматический тест и добавляйте такой же тест при каждом новом эндпоинте

OWASP API Security Top 10 тоже рекомендует писать тесты, проверяющие механизм авторизации, и не выкатывать изменения, на которых эти тесты падают.

Мнение этого сайта: легко упустить, но последствия серьёзны, поэтому проверяйте автоматическими тестами

IDOR технически скучен и легко упускается на code-review, при этом последствия серьёзны («один клик раскрывает персональные данные всех»). Поэтому практичный ход — добавить автоматический тест: запрос чужого идентификатора от имени другого пользователя должен возвращать 403. Принцип этого сайта — «никогда не защищаться в клиентском UI; решать только на сервере». Авторизация должна обеспечиваться механизмом при каждом запросе — её нельзя оставлять на человеческую внимательность.

Источники (первичные)

  • OWASP Top 10:2025, «A01 Broken Access Control» — top10.owasp.org (место в рейтинге; пример с небезопасными прямыми ссылками на объекты)
  • OWASP API Security Top 10 2023, «API1:2023 Broken Object Level Authorization» — api-security.owasp.org (предотвращение; рекомендация по тестам)
  • MITRE CWE-639: Authorization Bypass Through User-Controlled Key — cwe.mitre.org
  • Источники по двум случаям (объявления Companies House и Национального налогового агентства) приведены в разборе каждого случая

Читать дальше

Классификация

CWE классифицирует типы слабостей, из-за которых возникают уязвимости; MITRE ATT&CK классифицирует техники атакующих. Обе системы ведёт MITRE, и они широко используются для разметки уязвимостей и правил обнаружения.

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

FAQ

QЧто происходит при IDOR?
A

Вошедший пользователь меняет идентификатор в URL или API (?id=124 на другое значение) и просматривает, редактирует или удаляет чужой счёт, заказ, персональные данные или файлы. Это типичный пример самого частого класса проблем (нарушение контроля доступа) и пугает тем, что не требует никаких особых инструментов.

QКакая защита главная?
A

При каждом запросе на сервере проверять: «может ли ЭТОТ вошедший пользователь действовать с ЭТИМ объектом?» Даже если идентификатор корректно сформирован, проверяйте владение/разрешение и отказывайте при их отсутствии (запрет по умолчанию). Никогда не полагайтесь на скрытие в клиентском UI.

QПредотвращают ли это UUID или случайные идентификаторы?
A

Они лишь делают идентификаторы труднее угадать; это не решение. Если идентификатор утечёт или будет передан, запрос всё равно пройдёт. Держите рандомизацию как вспомогательное средство; основная защита — всегда проверка владения/разрешения на сервере.

QЧем IDOR отличается от BOLA?
A

Они описывают одну и ту же проблему. IDOR — давнее название из мира веб-приложений; BOLA (Broken Object Level Authorization) — название из OWASP API Security Top 10, где в редакции 2023 года оно стоит на первом месте (API1:2023). Оба означают, что отсутствует проверка авторизации на уровне отдельного объекта.

QКак проверить своё приложение на IDOR?
A

В своём приложении создайте двух тестовых пользователей, A и B. Войдя как A, запросите данные B по идентификатору для просмотра, изменения и удаления и убедитесь, что каждый запрос отклоняется (403 или 404). Вызывайте API напрямую, а не через UI, и сохраните эту проверку как автоматический тест.

QГде IDOR в OWASP Top 10?
A

В категории A01 — нарушение контроля доступа (Broken Access Control). Она стояла на первом месте и в редакции 2021 года, и в редакции 2025 года, а OWASP приводит в пример «возможность просматривать или редактировать чужую учётную запись, указав её уникальный идентификатор (небезопасные прямые ссылки на объекты)».