Перейти к содержимому
Noroxi

CWE-639 · 2 471 записей

Обход авторизации через управляемый пользователем ключ

Почему это происходит?

Эндпоинт получает запись по идентификатору из запроса, но не проверяет, принадлежит ли она запрашивающему пользователю.

Уязвимый и исправленный код

Показательный учебный пример. Выделенные строки показывают, где ошибка и где исправление.

Уязвимый код

ts
const invoice = await Invoice.findById(req.params.id);res.json(invoice);

Исправленный код

ts
const invoice = await Invoice.findOne({  id: req.params.id,  ownerId: req.user.id,});if (!invoice) return res.sendStatus(404);res.json(invoice);

Как предотвратить

  1. 01Добавляйте пользователя текущей сессии как условие в каждый запрос.
  2. 02Сосредоточьте проверку владения в едином слое авторизации.
  3. 03Пишите тесты перекрёстного доступа с двумя разными учётными записями.

CVE этого класса

2 474 записей

Все классы уязвимостей