ZAP vs Qualys: как мы автоматизировали сканирование веб-приложений

ZAP vs Qualys: как мы автоматизировали сканирование веб-приложений

Безопасность сайта без сложностей и дорогих лицензий? Мы внедрили OWASP ZAP вместо Qualys WAS — и получили мощный DAST, полный контроль, интеграцию с CI и автоматический анализ через Gemini CLI.

Когда мы начали работу над проектом X — небольшим, но требовательным сайтом по продаже деликатного белья после хирургии — мы знали, что безопасность будет иметь значение. Да, у нас не было ни банковского API, ни авторизации через Госуслуги, но люди доверяют нам личные данные, и это обязывает.

Встал вопрос: как организовать регулярный аудит веб-приложения без желания покупать очередной облачный продукт уровня Qualys WAS, у которого прайс от $1 995 в год за 25 сайтов, да даже не в этом дело, вы понимаете. Мы пошли другим путём: взяли OWASP ZAP, настроили его один раз, и теперь он живёт у нас в CI — сканирует, анализирует, и даже общается с Gemini CLI.

ZAP vs Qualys: наш расчёт

Характеристика

Qualys WAS

OWASP ZAP (snap + Automation Framework)

Стоимость

~$1 995/год за 25 веб‑приложений

Бесплатно (только ваша инфраструктура)

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

Облачный, API, Jenkins-плагины

YAML‑планы, CLI, snap, Docker, Gemini CLI

Гибкость конфигурации

Только в рамках SaaS

Полный контроль: глубина, задержки, лимиты

Развёртывание

SaaS

Локально, контейнеры, snap‑версия

Доступность

Лицензия, закрытая платформа

Open Source, комьюнити, без ограничений

Настройка в один YAML

У нас это работает так: в проекте есть zap/plan.yaml. Вот его содержимое:

  • env:

  • contexts:

  • - name: "prod"

  • urls:

  • - "https://site.com"

  • - "https://app.site.com"

  • rateLimitRules:

  • - description: "Soft limit for all requests"

  • enabled: true

  • matchType: "Regex"

  • matchString: ".*"

  • requestsPerSecond: 2

  • jobs:

  • - type: spider

  • parameters:

  • context: "prod"

  • maxDuration: 1

  • maxDepth: 2

  • maxChildren: 10

  • threadCount: 1

  • parseRobotsTxt: true

  • parseSitemapXml: true

  • postForm: false

  • processForm: true

  • - type: passiveScan-wait

  • parameters:

  • maxDuration: 1

  • - type: report

  • parameters:

  • template: "risk-confidence-html"

  • reportDir: "."

  • reportFile: "report.html"

  • reportTitle: "ZAP Soft Scan"

Сканирование запускается в CI командой:

  • zaproxy -cmd -autorun zap/plan.yaml

Почему нам этого достаточно

ZAP работает мягко. Не делает активных атак, не триггерит защиту хостинга. Скан проходит за минуту, spider обходит сайт в один поток.

Плюс: мы не просто получаем report.html и радуемся. У нас настроен Gemini CLI — и сразу после сканирования мы запускаем:

  • gemini -p "Проанализируй report.html: составь рейтинг рисков, предложи рекомендации и, если можно, покажи примеры фиксов."

Gemini возвращает отчёт в человеко-читаемом виде. Часто — с конкретными исправлениями: HTTP-заголовки, CSP, ограничения по методам.

Встраивание в пайплайн

Вот пример gitlab-ci.yml:

  • zap_scan:

  • stage: security

  • image: ubuntu:24.04

  • before_script:

  • - apt-get update && apt-get install -y snapd

  • - snap install zaproxy --classic

  • script:

  • - zaproxy -cmd -autorun zap/plan.yaml

  • - gemini -p "Проанализируй report.html: составь рейтинг рисков и предложи рекомендации."

  • artifacts:

  • paths:

  • - report.html

  • - gemini_output.md

Теперь мы получаем не просто скан — мы получаем продукт: аналитический отчёт, структурированный и понятный.

ZAP — это полноценный DAST-инструмент, который, в правильной связке с Gemini CLI и пайплайном вполне заменяет дорогой и условно доступный Qualys.

Еще публикации