SQL-инъекция (SQLi)

Внедрение SQL-кода через непроверенный ввод, позволяющее изменить логику запроса к базе данных.

СигнатураSQL Injection

SQL-инъекция возникает, когда пользовательский ввод напрямую склеивается в текст SQL-запроса. Злоумышленник может изменить логику запроса: обойти аутентификацию, прочитать чужие данные или повредить таблицы.

Как защититься: используйте параметризованные запросы (prepared statements), при которых данные передаются отдельно от текста запроса и не могут стать частью кода. Дополнительно применяйте ORM, валидацию ввода и принцип наименьших привилегий для учётной записи БД.

# Опасно: ввод склеивается со строкой запроса
login = request.get("login")
query = "SELECT * FROM users WHERE login = '" + login + "'"
cursor.execute(query)  # ввод admin' -- ломает логику

# Безопасно: параметризованный запрос
login = request.get("login")
cursor.execute("SELECT * FROM users WHERE login = %s", (login,))
← Все записи: Веб-уязвимости и защита
Поддержать проект