Как защититься от SQL-инъекций
Python
Middle
Без компании
Как защититься от SQL-инъекций
Ответы
Используйте параметризованные запросы (prepared statements) вместо конкатенации строк. Это самый надежный способ, так как данные передаются отдельно от SQL-кода.
Пример с SQLite:
```
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# Плохо (уязвимо к инъекциям):
# cursor.execute(f"SELECT * FROM users WHERE username = '{username}'")
# Хорошо (безопасно):
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
```
Для других СУБД:
- PostgreSQL: `%s` или `%(name)s`
- MySQL: `%s`
- SQL Server: `?` или `@param`
Дополнительные меры:
- Валидация ввода
- Использование ORM (SQLAlchemy, Django ORM)
- Ограничение прав доступа БД
- Экранирование спецсимволов (но это менее надежно)