Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="security-sql-injection"></a>

# SQL-параметры

## Коротко

Не вставляйте пользовательскую строку непосредственно в SQL.

## Плохо

```python
cursor.execute("SELECT * FROM users WHERE name = '" + name + "'")
```

## Хорошо

```python
cursor.execute("SELECT * FROM users WHERE name = %s", (name,))
```

## Почему

Пользовательский ввод не должен менять структуру команды.

## Когда применять

Пример для Python и Psycopg 3: `%s` — placeholder драйвера, а не строковая подстановка Python. Значения передаются отдельным аргументом. Для имён колонок и направления сортировки используйте разрешённый список; bind-параметры не заменяют SQL-идентификаторы.

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

- Попробуйте кавычки и SQL-фрагмент во входном значении.

## Человек

Определяет доступные операции и минимальные права подключения к БД.

## Агент

Реализует серверные ограничения и проверяет запрещённый запрос наряду с разрешённым.

Контроль результата:

- Попробуйте кавычки и SQL-фрагмент во входном значении.

## Источники

- [SQL Injection Prevention - OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html)
- [Passing parameters to SQL queries - psycopg 3.3.9.dev1 documentation](https://www.psycopg.org/psycopg3/docs/basic/params.html)

Уровень: Обязательно. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/security/no-secrets/rules/sql-injection.md)
