TL;DR — OWASP ZAP — самый популярный бесплатный сканер безопасности с более чем 10 млн загрузок. В руководстве — интеграция CI/CD, сканирование API, кастомные политики, конфигурация аутентификации и автоматизированная отчётность для QA-команд.

OWASP ZAP — самый популярный бесплатный инструмент тестирования безопасности в мире, которому доверяют тысячи организаций. Согласно статистике проекта OWASP, ZAP был загружен более 10 миллионов раз и является наиболее широко используемым open-source сканером веб-безопасности. Согласно исследованию MarketsandMarkets, мировой рынок тестирования безопасности приложений достигнет $10,4 млрд к 2027 году, что делает навыки в security testing всё более востребованными. Интеграция ZAP в CI/CD пайплайны позволяет командам обнаруживать SQL injection, XSS и небезопасные заголовки до продакшена.

«ZAP в CI/CD пайплайне — обязательное требование для меня в любом проекте. Baseline scan один находит отсутствующие security-заголовки и флаги cookies, которые разработчики постоянно упускают. Настройка занимает 15 минут и предотвращает целые классы уязвимостей.» — Yuri Kan, Senior QA Lead

Что такое OWASP ZAP?

OWASP (как обсуждается в Penetration Testing Basics for QA Testers) Zed Attack Proxy (ZAP) — самый популярный бесплатный инструмент тестирования безопасности в мире, активно поддерживаемый сообществом OWASP. Для QA-инженеров ZAP предоставляет автоматизированное сканирование безопасности для обнаружения уязвимостей вроде SQL (как обсуждается в Security Testing for QA: A Practical Guide) injection, XSS и небезопасных конфигураций до того, как они попадут в продакшен.

Почему ZAP для QA?

  • Бесплатный и Open Source - Без лицензионных затрат, полный доступ к функциям
  • Легко Автоматизировать - CLI, Docker, API для интеграции CI/CD
  • Комплексное Сканирование - Активное/пассивное сканирование, spidering, fuzzing
  • Тестирование API - Поддержка OpenAPI/Swagger, тестирование GraphQL
  • Обширная Отчетность - HTML, JSON, XML отчеты с рекомендациями по исправлению
  • Активное Сообщество - Регулярные обновления, плагины, marketplace

OWASP ZAP является ключевым инструментом для тестирования безопасности API и важной частью стратегии автоматизации тестирования. Интеграция с непрерывным тестированием в DevOps обеспечивает раннее обнаружение уязвимостей. Для комплексной проверки безопасности рекомендуется также проводить тестирование производительности API.

Режимы Сканирования ZAP

1. Пассивное Сканирование

Анализирует HTTP трафик без отправки дополнительных запросов. Безопасно запускать в продакшене.

# Запустить ZAP в daemon режиме
docker run -u zap -p 8080:8080 owasp/zap2docker-stable zap.sh -daemon \
  -host 0.0.0.0 -port 8080 -config api.disablekey=true

# Получить доступ к target через ZAP proxy
curl -x http://localhost:8080 https://example.com

# Сгенерировать отчет пассивного сканирования
curl "http://localhost:8080/JSON/core/action/jsonreport/"

Пассивное Сканирование Обнаруживает:

  • Отсутствующие security headers (CSP, X-Frame-Options, HSTS)
  • Небезопасные cookies (отсутствуют флаги HttpOnly, Secure)
  • Раскрытие информации (stack traces, комментарии в коде)
  • Устаревшие библиотеки и фреймворки

2. Активное Сканирование

Отправляет атакующие payloads для поиска уязвимостей. Использовать только на авторизованных целях.

# Spider target для обнаружения URL
docker run owasp/zap2docker-stable zap-baseline.py \
  -t https://example.com \
  -r report.html

# Полное активное сканирование
docker run owasp/zap2docker-stable (как обсуждается в [SQL Injection and XSS: Finding Vulnerabilities](/ru/blog/sql-injection-xss)) zap-full-scan.py \
  -t https://example.com \
  -r full-report.html \
  -z "-config api.disablekey=true"

Активное Сканирование Обнаруживает:

  • SQL Injection
  • Cross-Site Scripting (XSS)
  • Path Traversal
  • Remote Code Execution
  • XML External Entity (XXE)
  • Server-Side Request Forgery (SSRF)

3. Сканирование API

Тестирование REST API используя спецификации OpenAPI/Swagger.

# Импортировать OpenAPI spec и сканировать
docker run -v $(pwd):/zap/wrk:rw owasp/zap2docker-stable \
  zap-api-scan.py \
  -t https://api.example.com \
  -f openapi \
  -d /zap/wrk/openapi.json \
  -r /zap/wrk/api-report.html

Интеграция CI/CD

GitHub Actions

# .github/workflows/security-scan.yml
name: OWASP ZAP Security Scan

on:
  pull_request:
    branches: [main]

jobs:
  zap_scan:
    runs-on: ubuntu-latest
    steps:

      - uses: actions/checkout@v3

      - name: Build application
        run: docker-compose up -d

      - name: ZAP Baseline Scan
        uses: zaproxy/action-baseline@v0.7.0
        with:
          target: 'http://localhost:3000'
          rules_file_name: '.zap/rules.tsv'

      - name: Upload ZAP Report
        uses: actions/upload-artifact@v3
        with:
          name: zap-report
          path: report_html.html

Кастомные Политики Сканирования

Конфигурация rules.tsv

# Игнорировать ложные срабатывания
10021	IGNORE	(CSP: Wildcard Directive)
10038	IGNORE	(Content Security Policy Header Not Set)

# Fail на конкретных уязвимостях
40012	FAIL	(Cross Site Scripting - Reflected)
90018	FAIL	(SQL Injection)

# Предупреждение на средней серьезности
10054	WARN	(Cookie Without SameSite Attribute)

Интерпретация Результатов

Уровни Риска

РискОписаниеТребуемое Действие
ВысокийКритические уязвимости (SQL Injection, RCE)Исправить немедленно
СреднийЗначительные проблемы (XSS, слабая крипто)Исправить перед релизом
НизкийМинорные проблемы (отсутствующие headers)Исправить когда возможно

Частые Уязвимости и Исправления

SQL Injection:

# Уязвимо
query = f"SELECT * FROM users WHERE id = {user_input}"

# Исправлено - Использовать параметризованные запросы
cursor.execute("SELECT * FROM users WHERE id = ?", (user_input,))

XSS:

// Уязвимо
document.getElementById('output').innerHTML = userInput;

// Исправлено - Экранировать вывод
document.getElementById('output').textContent = userInput;

Отсутствующие Security Headers:

# Добавить в nginx.conf
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";

Заключение

OWASP ZAP необходим для интеграции тестирования безопасности в QA workflows. От автоматизированных CI/CD сканов до комплексного тестирования API, ZAP помогает идентифицировать уязвимости рано, когда их дешевле всего исправить.

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

  • Начинайте с baseline сканов в CI/CD
  • Используйте пассивное сканирование для мониторинга продакшена
  • Реализуйте кастомные политики для вашей толерантности к риску
  • Автоматизируйте аутентификацию для сканирования с авторизацией
  • Отслеживайте уязвимости во времени
  • Исправляйте высокие/критические проблемы немедленно

Смотрите также

Часто задаваемые вопросы

Что такое OWASP ZAP и он бесплатный? OWASP ZAP (Zed Attack Proxy) — бесплатный open-source сканер безопасности, поддерживаемый OWASP. Он обеспечивает активное/пассивное сканирование, тестирование API и CI/CD интеграцию без каких-либо затрат.

Чем отличается baseline scan от full scan в ZAP? Baseline scan запускает только пассивное сканирование — безопасно для продакшена. Full scan добавляет активные атаки для поиска SQL injection, XSS и других уязвимостей. Используй baseline для мониторинга, full scan — только на staging.

Как интегрировать OWASP ZAP в GitHub Actions? Используй официальный zaproxy/action-baseline или zaproxy/action-full-scan. Укажи URL работающего приложения и настрой файл rules.tsv для подавления ложных срабатываний.

Может ли OWASP ZAP тестировать REST API? Да. ZAP имеет режим API-сканирования, который импортирует OpenAPI/Swagger спецификации и автоматически тестирует все endpoints. Используй zap-api-scan.py или Python-библиотеку zapv2.

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

See Also