SQL-параметры
Не вставляйте пользовательскую строку непосредственно в SQL.
Проверено Изменено
Плохо
cursor.execute("SELECT * FROM users WHERE name = '" + name + "'")
Хорошо
cursor.execute("SELECT * FROM users WHERE name = %s", (name,))
Почему это важно
Пользовательский ввод не должен менять структуру команды.
Когда применять
Пример для Python и Psycopg 3: %s — placeholder драйвера, а не строковая подстановка Python. Значения передаются отдельным аргументом. Для имён колонок и направления сортировки используйте разрешённый список; bind-параметры не заменяют SQL-идентификаторы.
Кто что делает
Человек
Определяет доступные операции и минимальные права подключения к БД.
AI-агент
Реализует серверные ограничения и проверяет запрещённый запрос наряду с разрешённым.
Контроль результата:
- Попробуйте кавычки и SQL-фрагмент во входном значении.
Как проверить у себя
- Попробуйте кавычки и SQL-фрагмент во входном значении.
Первоисточники
История изменений на GitHub
Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.