IDOR (небезопасные прямые ссылки на объекты)
Доступ к чужим объектам через подстановку их идентификатора в запросе.
Сигнатура
Insecure Direct Object ReferenceIDOR — частный случай нарушения контроля доступа. Приложение принимает идентификатор объекта (например ?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