Почему классические уязвимости в веб-приложениях до сих пор не побеждены и как с этим жить?
Честно, за столько лет работы с вебом, я никак не могу понять, почему типичные дырки — типа XSS, SQL-инъекций и CSRF — до сих пор выпускают из-под контроля. Казалось бы, куча сканеров, правил в WAF, фреймворки с защитой "из коробки", а эти базовые баги продолжают попадаться даже на серьезных проектах. Вот, например, на одном из недавних сайтов, который я проверял, нашел простую, но очень классическую XSS через форму обратной связи. Как так? Технический долг или просто лень разработчиков?
С одной стороны, практика показывает, что обучение и код-ревью мощно снижают риск. Но с другой — все равно где-то постоянно вылезает малыш баг, который потом превращается в проблему. В моей практике заметил, что часто виноваты шаблоны работы — ленивое пользование ORM, игнорирование очистки данных и устаревшие библиотеки. Особенно если проект "растет", а безопасности уделяется внимание только когда уже случилась беда.
Кстати, тут тоже спорный момент — стоит ли изначально вкладываться в сложные системы защиты, если сам продукт еще “сырой” и активно меняется? Или лучше сконцентрироваться на базовых вещах и быстро патчить? Я склоняюсь к второму сценарию, потому что иногда серьезные меры тормозят разработку, и баги потом переключаются в режим fire-fighting.
Как вы справляетесь с этим балансом? Есть ли у кого-то опыт как внедрять минимальные, но эффективные меры защиты на старте проекта? Или реально без комплексного аудита и СиА секюрити не обойтись? В целом интересно, какие приемы сейчас реально помогают не пропускать эти классические уязвимости, кроме регулярного обновления и WAF?