IDOR (небезопасные прямые ссылки на объекты)

Доступ к чужим объектам через подстановку их идентификатора в запросе.

СигнатураInsecure Direct Object Reference

IDOR — частный случай нарушения контроля доступа. Приложение принимает идентификатор объекта (например ?id=123) и отдаёт данные, не проверяя, принадлежит ли объект текущему пользователю. Поменяв id, можно увидеть чужие данные.

Как защититься: всегда проверяйте принадлежность объекта пользователю на сервере, используйте косвенные или трудноугадываемые идентификаторы там, где уместно, не полагайтесь на «секретность» id.

# Опасно: отдаём счёт по id без проверки владельца
def get_invoice(invoice_id):
    return db.get_invoice(invoice_id)  # ?id=124 покажет чужой счёт

# Безопасно: фильтруем по владельцу
def get_invoice(user, invoice_id):
    inv = db.get_invoice(invoice_id)
    if inv.owner_id != user.id:
        raise Forbidden("Чужой ресурс")
    return inv
← Все записи: Веб-уязвимости и защита
Поддержать проект