OWASP Top 10: Уязвимости веб-приложений
Этот материал представляет собой глоссарий по OWASP Top 10 с примерами уязвимостей, контрмерами и вопросами для проверки знаний.
Суть в двух словах
OWASP Top 10 — это регулярно обновляемый список десяти наиболее критических уязвимостей веб-приложений, публикуемый организацией OWASP. Он служит отраслевым стандартом для оценки безопасности.
Подробное описание
OWASP Top 10 признан во всей индустрии как стандарт для оценки безопасности веб-приложений. Список выявляет самые частые и серьёзные уязвимости на основе реальных данных об атаках и анализа защиты приложений.
Каждая категория включает описание, анализ рисков, основные причины возникновения и методы защиты. Разработчики, специалисты по безопасности и аудиторы используют этот список при оценке и усилении защиты проектов.
Актуальная версия (2021 год) представила новые категории, такие как Insecure Design и Software and Data Integrity Failures. Этот документ считается обязательным чтением для всех, кто работает над информационной безопасностью и разработкой защищённого ПО.
Ключевые точки для проверки знаний
- 10 основных категорий веб-уязвимостей с подробной классификацией
- Регулярные обновления на основе статистики реальных атак
- Требования к экзаменам по разработке и архитектуре систем
- Концепции безопасности должны учитывать OWASP Top 10
- Основа для проверок и разработки политик безопасности
- Injection, XSS, ошибки аутентификации как главные угрозы
- Профилактика предотвращает большие потери от успешных эксплойтов
- Необходимо документировать применение требований OWASP в проектах
Основные категории (OWASP Top 10 2021)
- A01 – Broken Access Control: Неправильная реализация контроля доступа
- A02 – Cryptographic Failures: Слабая или отсутствующая криптография
- A03 – Injection: SQL, OS, LDAP инъекции
- A04 – Insecure Design: Отсутствие или неправильная архитектура безопасности
- A05 – Security Misconfiguration: Неправильная конфигурация систем
- A06 – Vulnerable Components: Использование уязвимых библиотек и зависимостей
- A07 – Identification & Authentication Failures: Проблемы с идентификацией и аутентификацией
- A08 – Software and Data Integrity Failures: Нарушение целостности ПО и данных
- A09 – Security Logging and Monitoring Failures: Отсутствие логирования и мониторинга
- A10 – Server-Side Request Forgery (SSRF): Подделка запросов со стороны сервера
Примеры из практики
SQL Injection (A03)
// Уязвимый код
String query = "SELECT * FROM benutzer WHERE name = '" + userName + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
// Безопасный способ с подготовленными запросами
String query = "SELECT * FROM benutzer WHERE name = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, userName);
ResultSet rs = stmt.executeQuery();
Cross-Site Scripting (A07)
// Уязвимый код
function zeigeNachricht(nachricht) {
document.getElementById('output').innerHTML = nachricht;
}
// Безопасный способ
function zeigeNachricht(nachricht) {
document.getElementById('output').textContent = nachricht;
}
// Или с экранированием
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
Broken Access Control (A01)
// Уязвимый код
@GetMapping("/admin/users")
public List<User> getUsers(HttpServletRequest request) {
// Нет проверки прав администратора!
return userService.getAllUsers();
}
// Безопасный способ
@GetMapping("/admin/users")
public List<User> getUsers(HttpServletRequest request) {
User currentUser = getCurrentUser(request);
if (!currentUser.hasRole("ADMIN")) {
throw new UnauthorizedException("Admin-Rechte erforderlich");
}
return userService.getAllUsers();
}
Контрмеры
Общие принципы безопасности
- Defense in Depth: несколько уровней защиты
- Least Privilege: предоставление минимально необходимых прав
- Security by Design: интеграция безопасности на этапе проектирования
- Regular Updates: своевременное обновление систем и зависимостей
Специфические меры
- Input Validation: проверка всех входных данных от пользователей
- Output Encoding: правильное экранирование выходных данных
- Parameterized Queries: использование параметризованных запросов против SQL инъекций
- Strong Authentication: многофакторная аутентификация
- HTTPS: обязательное использование шифрованного протокола
- Security Headers: применение CSP, HSTS, X-Frame-Options
Преимущества и недостатки
Плюсы OWASP Top 10
- Осведомлённость: повышает понимание существующих угроз
- Стандартизация: единый язык для обсуждения безопасности
- Приоритизация: сосредоточение на самых критических рисках
- Практическая направленность: основан на реальных данных атак
Минусы
- Неполнота: не охватывает все возможные уязвимости
- Ложное чувство безопасности: сосредоточение только на Top 10 может привести к игнорированию других рисков
- Устаревание: список может быстро потерять актуальность
- Сложность реализации: требует специальных знаний для применения
Типичные вопросы на экзаменах
-
Что такое OWASP и почему список Top 10 важен? OWASP — это организация, занимающаяся безопасностью приложений. Список Top 10 определяет приоритеты для наиболее критических рисков.
-
Объясните, что такое SQL Injection и как её предотвратить! SQL Injection — это внедрение SQL-кода через пользовательский ввод. Защита реализуется через подготовленные запросы и валидацию входных данных.
-
В чём отличие между XSS и CSRF? XSS (Cross-Site Scripting) выполняет код в браузере жертвы, CSRF (Cross-Site Request Forgery) выполняет действия от имени жертвы.
-
Почему Security by Design важен? Интеграция безопасности с самого начала проекта эффективнее и дешевле, чем добавление защиты постфактум.
Основные источники информации
- https://owasp.org/www-project-top-ten/
- https://cheatsheetseries.owasp.org/
- https://portswigger.net/web-security



