Тестирование Безопасности для QA-Инженеров

Тестирование безопасности — не только для пентестеров. QA-инженеры ежедневно работают с функциями, связанными с безопасностью: формы логина, поля ввода, API-эндпоинты и загрузки файлов. Понимание типичных уязвимостей делает вас более эффективным тестировщиком.

OWASP Top 10

РискПодход QA
Инъекции (SQL, XSS)Проверка полей со спецсимволами
Сломанная аутентификацияТщательное тестирование auth-потоков
Утечка данныхПроверка HTTPS, заголовков, хранилища
Нарушенный контроль доступаТестирование ролевого доступа
Неправильная конфигурацияПроверка страниц ошибок, заголовков
XSSТестирование всех пользовательских вводов
CSRFПроверка CSRF-токенов

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

Базовые Пейлоады

Тестируйте в каждом поле ввода, поиске, URL-параметре и профиле:

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

Где Тестировать

  • Строки поиска, поля комментариев, поля профиля, URL-параметры, имена загружаемых файлов, сообщения об ошибках

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

  1. Найдите действие, изменяющее состояние (смена пароля, обновление профиля)
  2. Проверьте форму — найдите скрытое поле CSRF-токена
  3. Отправьте нормально — должно работать
  4. Удалите или измените токен — запрос должен отклоняться
  5. Повторите с другого origin — должен отклоняться

Тестирование Заголовков Безопасности

curl -I https://example.com
ЗаголовокОжидаемое значениеНазначение
Strict-Transport-Securitymax-age=31536000Принуждение HTTPS
X-Content-Type-OptionsnosniffПредотвращение MIME sniffing
X-Frame-OptionsDENYПредотвращение clickjacking
Content-Security-PolicyОграничительная политикаПредотвращение XSS

Тестирование Чувствительных Данных

  • Нет паролей в исходном коде или сетевых запросах
  • Номера карт замаскированы в UI и логах
  • Токены сессий не в URL-параметрах
  • Нет чувствительных данных в localStorage

Упражнение: Аудит Безопасности

Часть 1: Тестирование XSS

Место вводаПейлоадВыполнился?Уязвимо?
Поиск<script>alert(1)</script>
Имя профиля<img src=x onerror=alert(1)>
Комментарии<svg onload=alert(1)>
URL-параметр?q="><script>alert(1)</script>

Часть 2: Тестирование CSRF

ТестОжидаемоРезультат
Форма имеет CSRF-токенТокен есть
Отправка с валидным токеномУспех
Отправка без токенаОтклонение (403)
Отправка с изменённым токеномОтклонение

Часть 3: Заголовки Безопасности

ЗаголовокЕсть?ЗначениеКорректно?
Strict-Transport-Security
X-Content-Type-Options
Content-Security-Policy

Часть 4: Безопасность Аутентификации

ТестОжидаемоРезультат
Логин с SQL injectionЛогин нормально отклоняет
Ошибка логина не раскрывает emailОбщее сообщение
Cookie сессии с HttpOnlyНе доступна через JS
Cookie сессии с SecureТолько через HTTPS
Решение: Типичные Находки Безопасности

Находка 1: Отражённый XSS в поиске. Ввод без кодирования. Исправление: HTML-encode всего пользовательского ввода.

Находка 2: Отсутствие CSRF-токена в обновлении профиля. Исправление: Добавить CSRF-токен ко всем формам.

Находка 3: Отсутствующие заголовки безопасности. Нет CSP и HSTS. Исправление: Добавить заголовки ко всем ответам.

Находка 4: Cookie сессии без HttpOnly. Доступна через document.cookie. Исправление: Флаг HttpOnly.

Находка 5: Подробные сообщения об ошибках. SQL-ошибки при логине. Исправление: Общие сообщения, детали только в серверных логах.

Инструменты для QA

ИнструментНазначениеСложность
DevToolsИнспекция заголовков, cookiesНизкая
OWASP ZAPАвтоматический сканерСредняя
SecurityHeaders.comБыстрая проверка заголовковНизкая
Mozilla ObservatoryКомплексное сканированиеНизкая

Ключевые Выводы

  • QA может и должен проводить базовое тестирование безопасности каждой функции
  • Тестируйте все вводы на XSS — поиск, профили, комментарии, URL-параметры
  • Проверяйте CSRF-защиту каждого действия, изменяющего состояние
  • Проверяйте security headers на каждом деплое
  • Cookies сессии должны иметь HttpOnly и Secure
  • Используйте OWASP Top 10 как чек-лист для планирования