Содержание
OWASP Top 10 — это список самых распространённых и опасных классов уязвимостей веб-приложений, который составляет открытое сообщество OWASP по данным проверок реальных систем. Актуальная версия — OWASP Top 10:2025. Для бизнеса это удобный чек-лист: если подрядчик не может объяснить, как закрыт каждый пункт, продукт уязвим.
Ниже — все десять пунктов простыми словами, с примерами и тем, что спрашивать у команды разработки.
Что такое OWASP Top 10 и почему на него ориентируются?
OWASP Top 10 — это рейтинг рисков безопасности веб-приложений от некоммерческого проекта Open Worldwide Application Security Project. Список обновляется раз в несколько лет; в версии 2025 года, по данным самого OWASP, использованы результаты тестирования более 2,8 миллиона приложений от 13 организаций.
На него ориентируются, потому что это общий язык между бизнесом, разработчиками и аудиторами. Требование «приложение защищено от уязвимостей OWASP Top 10» можно вписать в договор, проверить при аудите и обсудить с командой без глубокого погружения в технику.
Важно понимать ограничение: Top 10 — это минимум, а не полный стандарт. Для систем с повышенными требованиями, например финансовых, используют более подробный OWASP ASVS.
Какие уязвимости входят в OWASP Top 10:2025?
В OWASP Top 10:2025 входят десять категорий — от ошибок контроля доступа до неправильной обработки исключительных ситуаций. По сравнению с версией 2021 года появились две новые категории: риски цепочки поставок ПО и обработка ошибок, а подделка серверных запросов (SSRF) вошла в категорию контроля доступа.
| № | Категория | Простыми словами |
|---|---|---|
| A01 | Broken Access Control | Пользователь видит или меняет чужие данные |
| 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 and Alerting Failures | Атаку никто не заметил, потому что нет логов и оповещений |
| A10 | Mishandling of Exceptional Conditions | Ошибки обработаны так, что система открывается или падает |
Как выглядят эти уязвимости на практике?
На практике большинство уязвимостей выглядят буднично: не хватило одной проверки, осталась настройка по умолчанию, не обновили библиотеку. Разберём самые частые пункты на понятных примерах.
Контроль доступа и инъекции
Контроль доступа нарушен, когда сервер проверяет, что пользователь вошёл, но не проверяет, что запрошенный объект принадлежит ему. Классический пример — заказ по адресу /orders/1042: поменяли число на 1043 и увидели чужой заказ.
// Уязвимо: найдёт любой заказ по номеру
$order = Order::findOrFail($id);
// Безопасно: ищем только среди заказов текущего пользователя
$order = $request->user()->orders()->findOrFail($id);
Инъекция возникает, когда данные пользователя попадают в запрос к базе или в HTML как есть. Современные фреймворки защищают по умолчанию — параметризованными запросами и экранированием, — поэтому инъекции чаще всего появляются там, где разработчик обошёл защиту «сырым» запросом.
Фото: Unsplash
Настройки, зависимости и ошибки
- Неправильная конфигурация — включённый режим отладки на продакшене, открытое хранилище файлов, стандартные пароли в админке.
- Цепочка поставок — библиотека с известной уязвимостью или вредоносный пакет с похожим названием. Защита — автоматическая проверка зависимостей в CI и фиксированные версии.
- Обработка исключительных ситуаций — например, сбой проверки прав, после которого код по ошибке пропускает запрос дальше, или сообщение об ошибке, в котором видны пути и запросы к базе.
Что спросить у подрядчика о безопасности?
У подрядчика стоит спросить, как именно закрыт каждый класс рисков, и попросить показать это в коде и процессах, а не на словах. Хорошая команда отвечает конкретно: какими средствами, где проверяется и кто отвечает.
Вопросы, которые мы советуем задать:
- Как проверяется, что пользователь имеет доступ именно к этому объекту? Есть ли на это тесты?
- Как отслеживаются уязвимости в зависимостях? Что происходит, когда находят критичную?
- Где хранятся секреты — ключи, пароли к базе, токены сервисов?
- Как хранятся пароли пользователей и какие данные шифруются?
- Какие события безопасности логируются и кто получает оповещения?
- Проводился ли внешний аудит или тест на проникновение перед запуском?
Если на вопросы звучат общие фразы вроде «у нас всё защищено» — это сигнал, что безопасность держится на удаче.
Как встроить безопасность в процесс разработки?
Безопасность встраивают в процесс так же, как тестирование: автоматическими проверками на каждое изменение и регулярными ручными проверками важных частей. Разовый аудит перед запуском полезен, но через месяц после него код уже другой.
Минимальный набор для продукта любого размера:
- проверка зависимостей на известные уязвимости в CI — например,
composer auditилиnpm audit; - статический анализ кода и поиск секретов в репозитории;
- тесты на контроль доступа для ключевых сценариев;
- код-ревью с отдельным вниманием к авторизации и работе с вводом;
- обновление фреймворка и библиотек по расписанию, а не «когда будет время»;
- логи входов, смены прав и ошибок доступа с оповещениями.
# Шаг в CI: сборка падает, если в зависимостях есть известная уязвимость
- name: Audit dependencies
run: |
composer audit
npm audit --audit-level=high
Для продуктов с платежами или персональными данными к этому добавляется внешний тест на проникновение перед запуском и после крупных изменений.
Коротко
- OWASP Top 10:2025 — актуальный список главных рисков веб-приложений, удобный как чек-лист для бизнеса.
- Самая частая проблема — контроль доступа: пользователь получает чужие данные.
- Новые категории 2025 года — цепочка поставок ПО и обработка исключительных ситуаций.
- Спрашивайте подрядчика, как закрыт каждый пункт, и просите показать это в коде и CI.
- Безопасность — часть процесса: автоматические проверки на каждое изменение, а не разовый аудит.
Частые вопросы
Чем OWASP Top 10 отличается от OWASP ASVS?
Top 10 — это список главных рисков для осведомлённости, а ASVS — подробный стандарт проверки с сотнями требований и уровнями строгости. Top 10 подходит как минимум для любого проекта, ASVS — для систем с высокими требованиями.
Как часто обновляется OWASP Top 10?
Раз в несколько лет: предыдущие версии выходили в 2017 и 2021 годах, текущая — 2025. Между версиями полезно следить за обновлениями фреймворков и базами уязвимостей, а не ждать нового списка.
Нужен ли пентест небольшому сайту?
Для сайта-визитки без личных кабинетов обычно достаточно автоматических проверок и обновлений. Если на сайте есть регистрация, платежи или персональные данные, внешний тест на проникновение перед запуском оправдан.
Защищают ли фреймворки от уязвимостей из OWASP Top 10?
Частично: современные фреймворки по умолчанию защищают от инъекций, XSS и подделки запросов. Контроль доступа к конкретным объектам, настройки сервера и бизнес-логику фреймворк за вас не проверит.



