Как избежать инъекций в приложении
Python
Middle
Без компании
Как избежать инъекций в приложении
Ответы
Для предотвращения SQL-инъекций используйте параметризованные запросы или ORM (например, SQLAlchemy, Django ORM). Никогда не вставляйте пользовательский ввод напрямую в SQL-запрос.
**Пример с параметризованным запросом (SQLite):**
```
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# Плохо (уязвимо к инъекциям)
user_input = "admin'; DROP TABLE users;--"
cursor.execute(f"SELECT * FROM users WHERE username = '{user_input}'") # Опасность!
# Хорошо (безопасно)
cursor.execute("SELECT * FROM users WHERE username = ?", (user_input,))
```
Для веб-приложений:
- Экранируйте HTML/JS (используйте `html.escape` или шаблонизаторы, например Jinja2 с автоэкранированием).
- Валидируйте и санируйте ввод (библиотеки `bleach`, `WTForms`).
- Используйте подготовленные запросы для БД.
**Пример экранирования HTML:**
```
import html
user_input = "<script>alert('xss')</script>"
safe_output = html.escape(user_input) # Превратится в <script>...
```