advanced
XSS, SQL injection и NoSQL injection
Предотвращайте script и query injection через contextual output encoding, parameterized queries, schema validation, escaping discipline и safe templating.
Injection внедряет исполняемый синтаксис в интерпретаторы: HTML/JS (XSS), SQL, shell, LDAP, операторы MongoDB.
Защита SQL: только parameterized queries — не конкатенация user input.
await db.query('SELECT * FROM users WHERE email = $1', [email]);
await db.query(`SELECT * FROM users WHERE email = '${email}'`);
XSS: contextual output encoding в шаблонах, CSP, sanitize rich HTML проверенными библиотеками. Stored XSS в БД; reflected — эхо input; DOM XSS — client-side sinks.
NoSQL injection: валидация типов — отклонять объекты вместо строк; не передавать сырой user object в query builders.
На интервью: prepared statements vs escaping; риск `innerHTML`; ORM не убирает SQLi при raw queries.
Типовые ошибки: LIKE с неэкранированным `%`; user input в HTML email; `$where` в legacy Mongo.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Parameterize SQL; validate shapes для NoSQL.
- Encode output по sink (HTML, attr, URL, JS).
- CSP и осознанный sanitize HTML.
- Аудит raw query и escape в шаблонах.