OWASP Top 10 с практическими примерами
Вы создали веб-приложение и теперь беспокоитесь о безопасности. OWASP Top 10 — это авторитетный список критических рисков безопасности веб-приложений. Но читать список — одно, а понимать, как эти риски проявляются в реальном коде — совсем другое. В этой статье мы разберем каждую категорию OWASP Top 10 на практических примерах и конкретных шагах по их устранению.
1. Нарушение контроля доступа
Нарушение контроля доступа происходит, когда пользователи могут действовать за пределами своих разрешений. Например, пользователь может получить доступ к аккаунту другого пользователя, изменив параметр URL.
// Уязвимо: нет проверки, принадлежит ли запрошенный ID пользователя аутентифицированному пользователю
app.get('/api/user/:id', (req, res) => {
const user = getUserById(req.params.id);
res.json(user);
});
Мера защиты: Обеспечьте проверки контроля доступа на стороне сервера. Используйте ролевое или атрибутное управление доступом и запрещайте по умолчанию.
2. Криптографические ошибки
Конфиденциальные данные, такие как пароли и номера кредитных карт, должны быть зашифрованы при передаче и хранении. Использование слабых алгоритмов или жестко закодированных секретов — распространенные ошибки.
# Уязвимо: использование MD5 для хеширования паролей
import hashlib
hash = hashlib.md5(password.encode()).hexdigest()
Мера защиты: Используйте надежные алгоритмы хеширования с солью, такие как bcrypt или Argon2. Всегда используйте HTTPS (TLS) для передачи данных.
3. Инъекции
Уязвимости инъекций, такие как SQL-инъекции, возникают, когда недоверенные данные передаются интерпретатору как часть команды или запроса.
// Уязвимо: конкатенация строк в SQL-запросе
$sql = "SELECT * FROM users WHERE username = '" . $_GET['username'] . "'";
Мера защиты: Используйте параметризованные запросы или подготовленные выражения. Никогда не конкатенируйте пользовательский ввод напрямую в запросы.
4. Небезопасный дизайн
Небезопасный дизайн означает отсутствие или неэффективность проектирования элементов управления. Например, система восстановления пароля, которая раскрывает существование email, может помочь злоумышленникам.
Мера защиты: Моделирование угроз на этапе проектирования, использование безопасных шаблонов проектирования и внедрение ограничения скорости и других мер контроля.
5. Ошибки конфигурации безопасности
Сюда относится оставление включенных учетных записей по умолчанию, отображение трассировок стека пользователям или неправильная настройка разрешений облачного хранилища.
# Уязвимо: включен режим отладки в production
DEBUG = True
Мера защиты: Ужесточите конфигурации, удалите неиспользуемые функции и автоматизируйте проверки конфигурации.
6. Уязвимые и устаревшие компоненты
Использование библиотек с известными уязвимостями — это как оставить дверь открытой. Например, устаревшая версия популярной библиотеки может иметь уязвимость удаленного выполнения кода.
Мера защиты: Регулярно обновляйте зависимости, используйте инструменты, такие как OWASP Dependency-Check, и следите за CVE.
7. Ошибки идентификации и аутентификации
Слабая аутентификация позволяет злоумышленникам подбирать пароли или перехватывать сессии.
// Уязвимо: нет блокировки учетной записи после неудачных попыток
if (passwordMatches) {
loginUser();
} else {
// просто показать ошибку, без ограничения скорости
}
Мера защиты: Внедрите многофакторную аутентификацию, применяйте надежные парольные политики и используйте безопасное управление сессиями.
8. Нарушения целостности программного обеспечения и данных
Эта категория включает использование недоверенных источников для обновлений программного обеспечения или десериализацию недоверенных данных.
// Уязвимо: десериализация недоверенных данных
$data = unserialize($_POST['data']);
Мера защиты: Проверяйте цифровые подписи, используйте проверки целостности и избегайте десериализации недоверенных данных.
9. Ошибки логирования и мониторинга безопасности
Без надлежащего логирования нарушения остаются незамеченными. Например, отсутствие логирования неудачных попыток входа.
Мера защиты: Логируйте события, связанные с безопасностью, настройте оповещения и имейте план реагирования на инциденты.
10. Подделка запросов на стороне сервера (SSRF)
SSRF возникает, когда злоумышленник может заставить сервер отправлять запросы по непредусмотренным адресам.
// Уязвимо: получение URL из пользовательского ввода без проверки
fetch(req.query.url).then(...)
Мера защиты: Проверяйте и очищайте URL-адреса, используйте белые списки и ограничивайте права сервера.
Сравнительная таблица
| Риск | Пример | Мера защиты |
|---|---|---|
| Нарушение контроля доступа | Доступ к данным других пользователей через манипуляцию URL | Проверки доступа на стороне сервера |
| Криптографические ошибки | Хранение паролей в открытом виде | Использование надежного хеширования и TLS |
| Инъекции | SQL-инъекция через неочищенный ввод | Параметризованные запросы |
| Небезопасный дизайн | Восстановление пароля раскрывает существование email | Моделирование угроз и безопасные шаблоны |
| Ошибки конфигурации | Включен режим отладки в production | Ужесточение конфигураций |
| Уязвимые компоненты | Устаревшая библиотека с известным CVE | Регулярные обновления и проверки зависимостей |
| Ошибки аутентификации | Отсутствие ограничения скорости на входе | MFA и надежные политики |
| Нарушения целостности | Десериализация недоверенных данных | Проверка подписей и отказ от небезопасной десериализации |
| Ошибки логирования | Отсутствие логов неудачных входов | Внедрение логирования и мониторинга |
| SSRF | Запрос URL, предоставленного пользователем | Проверка и белые списки URL |
Часто задаваемые вопросы
Что такое OWASP Top 10?
OWASP Top 10 — это регулярно обновляемый список наиболее критических рисков безопасности веб-приложений, публикуемый Open Web Application Security Project (OWASP).
Как часто обновляется OWASP Top 10?
Он обновляется периодически, чтобы отражать новые угрозы и изменения в технологиях. Последнее крупное обновление было в 2021 году.
Достаточно ли OWASP Top 10 для безопасности?
Нет, это отправная точка. Комплексная программа безопасности включает практики безопасного кодирования, регулярное тестирование и непрерывный мониторинг.
Для дополнительной защиты ваших приложений рассмотрите использование инструментов, таких как Nginx Log Analyzer, для мониторинга и обнаружения подозрительной активности в логах вашего сервера.