OWASP Top 10: главные уязвимости веб-приложений и защита от них
OWASP Top 10 — список десяти самых критичных категорий рисков безопасности веб-приложений от некоммерческого фонда OWASP. Для владельца бизнеса это «карта угроз»: по ней понятно, о чём спрашивать подрядчика, что требовать в договоре и что проверять при аудите сайта, интернет-магазина или личного кабинета.
Что такое OWASP и зачем бизнесу его Top 10
OWASP (Open Worldwide Application Security Project) — международный некоммерческий фонд, основанный в 2001 году; его проекты и инструменты открыты и бесплатны. Top 10 — самый известный из них: первая версия вышла в 2003 году, редакция 2025 года — восьмая по счёту. Восемь категорий из десяти отбираются по данным тестирования приложений, которые передают компании и исследователи, а две — по опросу практиков: под риски, которые плохо ловятся автоматикой, но реально бьют по бизнесу.
Актуальный список OWASP Top 10:2025
Релиз-кандидат новой редакции OWASP представил в ноябре 2025 года, пометку «RC» с неё сняли на рубеже 2025–2026 годов. В анализ вошли 589 типов слабостей (CWE) — против почти 400 в редакции 2021 года. Порядок категорий по первоисточнику:
| № | Категория (оригинал) | Суть по-русски |
|---|---|---|
| A01 | Broken Access Control | Нарушение контроля доступа (включая SSRF) |
| A02 | Security Misconfiguration | Небезопасная конфигурация |
| A03 | Software Supply Chain Failures | Сбои в цепочке поставок ПО |
| A04 | Cryptographic Failures | Криптографические ошибки |
| A05 | Injection | Инъекции (SQL, XSS, команды ОС) |
| A06 | Insecure Design | Небезопасное проектирование |
| A07 | Authentication Failures | Сбои аутентификации |
| A08 | Software or Data Integrity Failures | Нарушение целостности ПО и данных |
| A09 | Security Logging & Alerting Failures | Сбои журналирования и оповещения |
| A10 | Mishandling of Exceptional Conditions | Неправильная обработка исключительных ситуаций |
Что изменилось: OWASP Top 10 2021 и 2025
В новой редакции две новые категории и одно объединение. Главный сигнал для бизнеса: на второе место поднялись ошибки конфигурации, а устаревшие компоненты превратились в более широкий риск цепочки поставок — от npm-пакетов до сборочных серверов.
| 2021 | 2025 | Что произошло |
|---|---|---|
| A01 Broken Access Control | A01 | Осталась первой, в неё влит SSRF |
| A02 Cryptographic Failures | A04 | Опустилась на две позиции |
| A03 Injection | A05 | Опустилась на две позиции, XSS по-прежнему здесь |
| A04 Insecure Design | A06 | Опустилась на две позиции |
| A05 Security Misconfiguration | A02 | Поднялась с пятого на второе место |
| A06 Vulnerable and Outdated Components | A03 | Расширена до Software Supply Chain Failures |
| A07 Identification and Authentication Failures | A07 | Место то же, название короче |
| A08 Software and Data Integrity Failures | A08 | Место то же, название уточнено |
| A09 Security Logging and Monitoring Failures | A09 | Акцент сместился с мониторинга на оповещение |
| A10 Server-Side Request Forgery | — | Объединена с A01 |
| — | A10 | Новая: Mishandling of Exceptional Conditions |
Категории A01–A05: доступ, конфигурация, зависимости, криптография, инъекции
A01. Нарушение контроля доступа
Пользователь видит или меняет то, что ему не положено. По данным OWASP, хотя бы одна слабость из 40 CWE этой категории нашлась у 3,73% протестированных приложений. Пример: в личном кабинете на Laravel или Node.js заказ открывается по адресу /orders/10452 — меняем номер на 10453 и видим чужие ФИО и адрес доставки. Сюда же теперь относится SSRF — «загрузка картинки по ссылке» к внутренним адресам сервера.
Защита: запрет по умолчанию, проверка прав на сервере при каждом запросе к объекту (policies в Laravel, middleware в Express, группы и права в Битрикс), белый список доменов для загрузки по URL.
A02. Небезопасная конфигурация
Код нормальный, но развёрнут небрежно: APP_DEBUG=true в Laravel показывает трассировку и переменные окружения, из корня сайта доступны папка .git, бэкап base.sql.zip или phpinfo.php, Redis слушает внешний интерфейс без пароля, в админке Битрикс остались учётки бывших подрядчиков.
Защита: раздельные конфигурации для разработки и продакшена, закрытые служебные пути на уровне веб-сервера, заголовки безопасности (HSTS, CSP, X-Frame-Options).
A03. Сбои в цепочке поставок ПО
Уязвимость приходит не из вашего кода, а из плагинов, модулей, библиотек и сборочного конвейера. В данных категория встречается реже других, но у неё самые высокие средние оценки эксплуатируемости и ущерба. В сентябре 2025 года через фишинг сопровождающего были скомпрометированы популярные npm-пакеты, включая chalk и debug, — вредоносные версии попадали в сборки автоматически.
Защита: реестр зависимостей (SBOM), регулярные npm audit и composer audit, фиксированные версии в lock-файлах, отказ от «брошенных» плагинов, двухфакторная аутентификация у всех, кто публикует код.
A04. Криптографические ошибки
Данные передаются или хранятся без надёжной защиты: самописная CMS хранит пароли в MD5 без соли, ключи API платёжного сервиса лежат в публичном репозитории, часть форм работает по HTTP.
Защита: HTTPS с HSTS, хеширование паролей через bcrypt или Argon2 (Laravel использует bcrypt по умолчанию, WordPress перешёл на bcrypt в версии 6.8), секреты — в переменных окружения или хранилище секретов.
A05. Инъекции
Пользовательский ввод попадает в SQL-запрос, HTML или команду ОС и исполняется как код. Категория объединяет XSS (часто, но с умеренным ущербом) и SQL-инъекции (реже, но с максимальным ущербом): фильтр каталога собирает SQL строкой из параметров URL, отзыв с тегом <script> выполняется у каждого посетителя карточки товара. Механика подробно разобрана в статье что такое SQL-инъекция.
Защита: параметризованные запросы и ORM (Eloquent, D7 в Битрикс, Prisma), экранирование вывода по умолчанию, Content Security Policy, валидация ввода по белому списку.
Категории A06–A10: проектирование, вход, целостность, логи, сбои
A06. Небезопасное проектирование
Ошибка не в строке кода, а в логике, и сканеры её почти не находят. Цена приходит в корзину из скрытого поля формы и подменяется; промокод применяется повторно; отправка SMS-кода не ограничена, и злоумышленник за ночь «сжигает» бюджет на рассылку.
Защита: моделирование угроз на этапе проектирования, расчёт цен и скидок только на сервере, лимиты частоты запросов.
A07. Сбои аутентификации
Слабая проверка того, кто входит: /wp-login.php или /bitrix/admin/ без ограничения попыток и второго фактора, четырёхзначный SMS-код без лимита, активные старые сессии после смены пароля.
Защита: 2FA для всех администраторов, ограничение неудачных попыток, проверка паролей по базам утечек, инвалидация сессий.
A08. Нарушение целостности ПО и данных
Система доверяет коду или данным, не проверив подлинность: «нуленная» тема WordPress с бэкдором, скрипт виджета со стороннего CDN без проверки целостности, десериализация данных из cookie.
Защита: официальные дистрибутивы и лицензии, атрибут integrity (SRI) для внешних скриптов, подпись артефактов сборки, отказ от десериализации недоверенных данных.
A09. Сбои журналирования и оповещения
Атаку не видно: события не пишутся или их никто не читает. OWASP подчёркивает, что логи без оповещений почти бесполезны. Типичная картина — о взломе узнают через месяцы, когда Яндекс помечает сайт как опасный.
Защита: журналирование входов, смены прав и платёжных событий, хранение логов отдельно от сервера приложения, уведомления в Telegram или на почту.
A10. Неправильная обработка исключительных ситуаций
Новая категория 2025 года (24 CWE): при сбое система показывает лишнее, падает или «открывается» (fail open). Платёжный шлюз не ответил, обработчик поймал исключение — и заказ всё равно отмечен оплаченным; необработанный отказ промиса роняет Node.js-процесс до ручного перезапуска.
Защита: принцип «при ошибке — запретить» (fail closed), централизованная обработка исключений, нейтральные сообщения пользователю, откат транзакций, тесты на отказ внешних сервисов.
Другие проекты OWASP: ASVS, API Security, LLM Top 10
- ASVS (Application Security Verification Standard) — проверяемые требования на трёх уровнях: L1 — базовый минимум, L2 — для большинства приложений с персональными данными и платежами, L3 — для критичных систем. Актуальная версия — 5.0, вышла в мае 2025 года.
- API Security Top 10 — рейтинг рисков API, актуальная редакция 2023 года. Важен для мобильных приложений, SPA и интеграций с 1С.
- Top 10 for LLM Applications — риски приложений с нейросетями: промпт-инъекции, утечки данных через ответы модели, избыточные полномочия. Актуален, если на сайте есть ИИ-чат-бот. В декабре 2025 года вышел отдельный Top 10 для агентных ИИ-приложений.
Как использовать OWASP Top 10 в ТЗ, договоре и при аудите
Фразу «сайт должен быть защищён от уязвимостей OWASP Top 10» на приёмке почти невозможно проверить. Рабочая схема такая:
- В ТЗ — ссылка на OWASP ASVS с уровнем (для магазина или личного кабинета обычно L2) и перечень обязательных мер: 2FA для админов, хеширование паролей, заголовки безопасности, журналирование.
- В договоре — передача реестра сторонних компонентов, устранение уязвимостей высокой и критической степени до приёмки и в гарантийный период, запрет нелицензионных модулей.
- При приёмке — отчёт сканирования и ручной проверки по категориям Top 10, повторная проверка после исправлений.
- В эксплуатации — обновления CMS, плагинов и зависимостей, ревизия доступов, периодический аудит.
Независимый аудит безопасности сайта обычно строится по категориям OWASP: отчёт показывает подтверждённые риски с уровнем критичности и планом исправления. При смене подрядчика или покупке проекта его стоит дополнить техническим аудитом кода — он покажет правки ядра CMS, устаревшие зависимости и техдолг, из которых растут A03 и A06. Ориентиры: базовый аудит безопасности типового сайта на популярной CMS — от 12 000–17 000 ₽, расширенный с ручным анализом и пентестом-лайт — от 35 000–60 000 ₽, экспресс-аудит кода — от 30 000 ₽; итог зависит от объёма, стека и числа интеграций. Подробнее — в статье сколько стоит аудит безопасности сайта.
Сканеры уязвимостей: что находят и чего не видят
| Инструмент | Тип | Что даёт |
|---|---|---|
| ZAP by Checkmarx | DAST, бесплатный | Проверяет работающий сайт снаружи: заголовки, XSS, часть инъекций, ошибки конфигурации |
| Burp Suite | Прокси и сканер | Основной инструмент ручного тестирования; сканер — в платной редакции |
| npm audit, composer audit, OWASP Dependency-Check | Анализ зависимостей | Известные уязвимости в библиотеках (A03) |
| WPScan, «Сканер безопасности» Битрикс | Проверки под CMS | Устаревшие плагины, модули и настройки платформы |
ZAP раньше был флагманским проектом OWASP: в 2023 году он ушёл из фонда, а с сентября 2024 года развивается при поддержке Checkmarx и остаётся открытым и бесплатным. Сканеры хорошо находят проблемы A02, A03 и A05, но почти не видят A01 (нужно понимать, кому что положено), A06 (бизнес-логика) и A10 — их закрывает только ручная проверка. Поэтому один прогон сканера не «закрывает OWASP».
OWASP Top 10 и 152-ФЗ
Российские законы на OWASP не ссылаются. Но статья 19 закона 152-ФЗ обязывает оператора принимать правовые, организационные и технические меры защиты персональных данных — в том числе определять угрозы, оценивать эффективность мер, обнаруживать факты несанкционированного доступа и восстанавливать данные. Для сайта с заявками и заказами закрытие рисков Top 10 — практическая часть этих технических мер.
Чек-лист защиты веб-приложения по OWASP Top 10:2025
- Права проверяются на сервере для каждого объекта: чужой заказ по подмене ID не открывается (A01)
- Отладка на проде выключена, .git, бэкапы и служебные скрипты недоступны снаружи (A02)
- Есть реестр плагинов и зависимостей, обновления по графику, брошенные модули удалены (A03)
- HTTPS с HSTS, пароли в bcrypt или Argon2, секретов нет в репозитории (A04)
- Запросы к базе параметризованы, вывод экранируется, настроена CSP (A05)
- Цены, скидки и лимиты считаются на сервере, SMS и формы защищены от злоупотреблений (A06)
- У администраторов включена 2FA, число попыток входа ограничено (A07)
- Модули и темы только из официальных источников, внешние скрипты с SRI (A08)
- Критичные события логируются, настроены оповещения (A09)
- При сбое внешних сервисов система отказывает, а не пропускает операцию (A10)
- Раз в год или после крупных изменений — независимый аудит с повторной проверкой
Базовую самопроверку по внешним признакам можно провести по чек-листу из 15 пунктов, а всё, что требует доступа к коду и логике, — доверить специалистам.
