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

CWE-89 · 17 346 записей

SQL-инъекция

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

Текст запроса формируется конкатенацией с пользовательским вводом. СУБД не может определить, где заканчиваются данные и начинается команда.

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

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

Уязвимый код

ts
const owner = req.query.owner;const rows = await db.query(  "SELECT * FROM files WHERE owner = '" + owner + "'");

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

ts
const owner = req.query.owner;const rows = await db.query(  "SELECT * FROM files WHERE owner = $1",  [owner]);

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

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

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

10 000 записей

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