Input validation + parameterized queries + safe APIs
Данните се валидират според очакван тип/формат; данните и code/queries се държат отделно.
Какво е
Данните се валидират според очакван тип/формат; данните и code/queries се държат отделно.
Как работи
Parameterized queries и safe execution APIs предотвратяват интерпретирането на attacker input като команда.
Injection с едно изречение
Проблемът възниква, когато системата не различава данни от инструкции.
Лош модел
"SELECT * FROM users WHERE name = '" + input + "'"
По-добър модел
Query structure се дефинира отделно, а user input се предава като параметър.
Същият принцип важи извън SQL: shell commands, LDAP filters, templates и XML parsers имат различни безопасни API-та и различни contexts.
Типична грешка
Универсална функция sanitize(input) и убеждението, че веднъж „почистен“ string е безопасен във всеки context. Не е.
Практическа имплементация
- Allowlist validation.
- Parameterized DB queries.
- No shell concatenation.
- Disable risky XML features.
- Typed schemas.
Какво НЕ решава
„Sanitize everything“ не е универсален подход. Context-specific controls са нужни.
Предпазва най-силно от
- HTTP Parameter Pollution (HPP) · Web приложения и браузърни атаки
- LDAP Injection · Web приложения и браузърни атаки
- NoSQL Injection · Web приложения и браузърни атаки
- OS Command Injection · Web приложения и браузърни атаки
- Path/Directory Traversal · Web приложения и браузърни атаки
- SQL Injection (SQLi) · Web приложения и браузърни атаки
- XML External Entity (XXE) · Web приложения и браузърни атаки
- XPath/XQuery Injection · Web приложения и браузърни атаки
Помага частично срещу
- Server-Side Template Injection (SSTI) · Web приложения и браузърни атаки4.6 SSTI — частично