OWASP Top 10 с практическими примерами

Security2026-10-03TryQuickToolBox

Как веб-разработчик, вы наверняка слышали о OWASP Top 10 — списке наиболее критичных рисков безопасности веб-приложений. Но знаете ли вы, как эти риски проявляются в реальном коде? В этой статье мы разберём каждый пункт OWASP Top 10 (редакция 2021 года) с практическими примерами и конкретными способами защиты. К концу вы сможете находить и устранять эти уязвимости в своих проектах.

1. Нарушение контроля доступа

Нарушение контроля доступа происходит, когда пользователи могут действовать за пределами своих разрешений. Например, пользователь может получить доступ к данным другого пользователя, изменив параметр URL.

Пример: Веб-приложение получает данные пользователя через /api/users/123. Если нет проверки, что авторизованный пользователь — это 123, злоумышленник может просто изменить ID, чтобы получить доступ к чужим данным.

Защита: Реализуйте надлежащие проверки авторизации при каждом запросе. Используйте ролевой контроль доступа (RBAC) и проверяйте разрешения на стороне сервера.

2. Криптографические сбои

Эта категория (ранее «Раскрытие конфиденциальных данных») охватывает сбои, связанные с криптографией, например передачу данных в открытом виде или использование слабых алгоритмов.

Пример: Хранение паролей с помощью MD5 или SHA-1 без соли. Злоумышленники могут легко взломать такие хэши.

Защита: Используйте стойкие адаптивные алгоритмы хэширования, такие как bcrypt, scrypt или Argon2. Всегда применяйте HTTPS.

3. Инъекции

Уязвимости инъекций, такие как SQL-, NoSQL-, OS- и LDAP-инъекции, возникают, когда недоверенные данные передаются интерпретатору как часть команды или запроса.

Пример: Форма входа, которая конкатенирует пользовательский ввод в SQL-запрос:

SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'

Злоумышленник может ввести ' OR '1'='1, чтобы обойти аутентификацию.

Защита: Используйте параметризованные запросы или подготовленные выражения. Никогда не конкатенируйте пользовательский ввод в запросы.

4. Небезопасный дизайн

Небезопасный дизайн относится к недостаткам архитектуры и проектирования приложения, а не только к ошибкам реализации.

Пример: Функция сброса пароля, использующая контрольные вопросы с легко угадываемыми ответами или не имеющая ограничения частоты попыток.

Защита: Моделирование угроз на этапе проектирования, использование безопасных шаблонов проектирования, а также ограничение частоты запросов и блокировка учётных записей.

5. Неправильная конфигурация безопасности

Сюда входят учётные записи по умолчанию, неиспользуемые страницы, неисправленные уязвимости, незащищённые файлы и каталоги и многое другое.

Пример: Включённый листинг каталогов на сервере Nginx, раскрывающий конфиденциальные файлы.

Защита: Усильте конфигурации: отключите листинг каталогов, удалите учётные записи по умолчанию, поддерживайте ПО в актуальном состоянии и используйте заголовки безопасности.

6. Уязвимые и устаревшие компоненты

Использование компонентов с известными уязвимостями может скомпрометировать всё приложение.

Пример: Использование старой версии JavaScript-библиотеки, например lodash, с известной уязвимостью загрязнения прототипа.

Защита: Регулярно сканируйте зависимости (например, с помощью npm audit, OWASP Dependency-Check) и обновляйте их.

7. Сбои идентификации и аутентификации

Эти сбои позволяют злоумышленникам скомпрометировать пароли, ключи или токены сессий, а также эксплуатировать другие недостатки реализации для присвоения личности других пользователей.

Пример: Допущение слабых паролей, таких как «123456», или отсутствие многофакторной аутентификации (MFA).

Защита: Обеспечьте строгие политики паролей, внедрите MFA и используйте безопасное управление сессиями.

8. Сбои целостности программного обеспечения и данных

Эта категория посвящена предположениям об обновлениях ПО, критичных данных и конвейерах CI/CD без проверки целостности.

Пример: Загрузка и выполнение бинарных файлов из недоверенных источников без проверки подписей.

Защита: Используйте цифровые подписи, проверяйте контрольные суммы и защищайте конвейер CI/CD.

9. Сбои логирования и мониторинга безопасности

Недостаточное логирование и мониторинг позволяют злоумышленникам закрепляться, перемещаться и сохранять доступ.

Пример: Отсутствие логирования неудачных попыток входа, что делает атаки перебором незаметными.

Защита: Логируйте события, связанные с безопасностью, настройте оповещения о подозрительной активности и регулярно просматривайте логи.

10. Подделка серверных запросов (SSRF)

Уязвимости SSRF возникают, когда веб-приложение получает удалённый ресурс без проверки URL, предоставленного пользователем.

Пример: Функция вебхука, которая получает URL, указанный пользователем. Злоумышленник может заставить сервер запросить внутренние ресурсы, такие как http://169.254.169.254/latest/meta-data/ в AWS.

Защита: Проверяйте и очищайте URL, используйте белые списки и ограничивайте исходящий трафик.

Практические шаги для устранения OWASP Top 10

  1. Внедрите контроль доступа: Обеспечьте проверки авторизации при каждом запросе на стороне сервера.
  2. Используйте надёжную криптографию: Хэшируйте пароли с помощью bcrypt/Argon2, применяйте HTTPS.
  3. Предотвращайте инъекции: Используйте параметризованные запросы и экранируйте вывод.
  4. Проектируйте безопасно: Моделируйте угрозы, используйте безопасные шаблоны и ограничивайте частоту запросов.
  5. Усильте конфигурации: Отключите неиспользуемые функции, обновляйте ПО, настройте заголовки безопасности.
  6. Управляйте зависимостями: Регулярно сканируйте и обновляйте компоненты.
  7. Укрепляйте аутентификацию: Обеспечьте строгие пароли, внедрите MFA.
  8. Проверяйте целостность: Используйте подписи и безопасный CI/CD.
  9. Логируйте и мониторьте: Логируйте события безопасности, настройте оповещения.
  10. Предотвращайте SSRF: Проверяйте URL, используйте белые списки, ограничивайте исходящий трафик.

FAQ

Что такое OWASP Top 10?

OWASP Top 10 — это регулярно обновляемый список наиболее критичных рисков безопасности веб-приложений, публикуемый Open Web Application Security Project (OWASP). Он служит базовым ориентиром для разработчиков по защите своих приложений.

Как часто обновляется OWASP Top 10?

Он обновляется примерно каждые три-четыре года. Последняя версия — 2021 года, предыдущая — 2017 года.

Можно ли полагаться только на OWASP Top 10 в вопросах безопасности?

Нет, это лишь отправная точка. Следует также учитывать другие ресурсы, такие как OWASP Application Security Verification Standard (ASVS), и проводить регулярное тестирование безопасности.

Хотите быстро проанализировать логи Nginx на предмет подозрительной активности? Попробуйте наш Nginx Log Analyzer, чтобы выявить потенциальные атаки и следить за безопасностью вашего веб-сервера.