Вот такой момент: сталкиваюсь постоянно с одними и теми же дырами — SQL-инъекции, XSS, неправильные настройки CORS и вообще слабая валидация. Пытаюсь всегда сначала понять, где реально проблема — например, с помощью парочки автоматических сканеров плюс ручной просмотр кода, если есть доступ. Потом сравниваю варианты исправлений. Иногда проще настроить готовый WAF, но он не всегда ловит всё и может сломать функционал. А иногда лучше сразу затачивать код и использовать ORM, чтобы SQL-инъекции не светились вообще.
Главный минус «железного» WAF — это ложные срабатывания, которые заставляют или лезть в логи, или блокировать пользователей по ошибке. Зато экономит время, когда не успеваешь разбирать баги. Но если хочешь стабильность и полный контроль — лучше не полагаться на чудо-средства, а чистить код, тестировать на тестовом окружении, фиксить все предупреждения, плюс держать на глазах обновления библиотек.
В итоге, для малого сайта достаточно базовых проверок и хардена на уровне сервера с минимальным набором правил, для крупного — только комплекс из регулярных аудитов, автотестов и WAF в связке. Кто как обычно выбирает? Помогают ли у вас готовые сканеры или только ручной разбор?