Когда мы начали работу над проектом 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.