Учебник Веб-безопасность для начинающих
Практический курс о том, как устроены типовые уязвимости веб-приложений и, главное, как их закрывать. Мы идём по OWASP Top 10 2021, разбираем XSS, CSRF, TLS и заголовки безопасности, управление секретами и инструменты аудита. Курс полностью защитный и образовательный: мы объясняем, как возникает уязвимость и почему она опасна, и фокусируемся на конкретных мерах защиты — валидации, параметризации запросов, заголовках и политиках. Для junior- и middle-разработчиков, тестировщиков и студентов. В финале — раздел про закон и этику: тестировать можно только свои системы или с письменного разрешения.
Курс «Веб-безопасность: OWASP Top 10» состоит из 11 разделов и 37 уроков: Модель угроз и принципы безопасности, OWASP Top 10: контроль доступа и данные, OWASP Top 10: конфигурация, компоненты, аутентификация, OWASP Top 10: целостность, мониторинг, SSRF, Атаки на стороне клиента: XSS и CSRF, Транспорт, секреты и инструменты, Закон и этика, Безопасность API: OWASP API Top 10, Аутентификация, сессии и OAuth вглубь, Продвинутые веб-уязвимости и защита и Безопасная разработка и DevSecOps. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Модель угроз и принципы безопасности
- Триада CIA: что мы вообще защищаем
Конфиденциальность, целостность и доступность данных: что означает каждое свойство и как нарушения проявляются в вебе.
- Модель угроз: думать как защитник
Как строить модель угроз: активы, точки входа, нарушители и поверхность атаки. Подход STRIDE простыми словами.
- Наименьшие привилегии и эшелонированная защита
Принципы least privilege, defense in depth, fail securely и secure by default — основа надёжной архитектуры.
- Триада CIA: что мы вообще защищаем
2 OWASP Top 10: контроль доступа и данные
- A01: Broken Access Control
Сломанный контроль доступа: IDOR, обход проверок прав и privilege escalation. Как правильно проверять авторизацию.
- A02: Cryptographic Failures
Криптографические сбои: данные без шифрования, слабые алгоритмы, хранение паролей. Как хешировать и шифровать правильно.
- A03: Injection и защита от SQL-инъекций
Инъекции и SQLi: почему конкатенация строк опасна и как параметризованные запросы полностью закрывают проблему.
- A04: Insecure Design
Небезопасный дизайн: дефекты на уровне архитектуры, которые нельзя залатать кодом. Threat modeling и secure design patterns.
- A01: Broken Access Control
3 OWASP Top 10: конфигурация, компоненты, аутентификация
- A05: Security Misconfiguration
Ошибки конфигурации: дефолтные пароли, открытые порты, подробные ошибки, лишние сервисы. Hardening по шагам.
- A06: Vulnerable and Outdated Components
Уязвимые зависимости: чужой код в вашем проекте. CVE, SCA-сканеры, обновления и управление цепочкой поставок.
- A07: Identification and Authentication Failures
Сбои аутентификации: слабые пароли, брутфорс, плохие сессии. MFA, rate limiting, безопасные cookie.
- A05: Security Misconfiguration
4 OWASP Top 10: целостность, мониторинг, SSRF
- A08: Software and Data Integrity Failures
Сбои целостности: непроверенные обновления, небезопасная десериализация, CI/CD-конвейер. Подписи и проверка источников.
- A09: Security Logging and Monitoring Failures
Сбои логирования и мониторинга: атаки остаются незамеченными. Что логировать, как алертить и не утечь данные в логи.
- A10: Server-Side Request Forgery (SSRF)
SSRF: сервер обманом отправляет запросы по указанию злоумышленника. Белые списки, изоляция метаданных, сегментация сети.
- A08: Software and Data Integrity Failures
5 Атаки на стороне клиента: XSS и CSRF
- XSS: типы и защита экранированием
Межсайтовый скриптинг: хранимый, отражённый и DOM-based XSS. Экранирование вывода по контексту и безопасный рендеринг.
- Content Security Policy (CSP)
CSP как второй слой защиты от XSS: белый список источников скриптов, запрет inline-кода, отчёты о нарушениях.
- CSRF: токены и SameSite
Подделка межсайтовых запросов (CSRF): как работает атака и как защищаться CSRF-токенами и атрибутом cookie SameSite.
- XSS: типы и защита экранированием
6 Транспорт, секреты и инструменты
- HTTPS, TLS и заголовки безопасности
TLS и HTTPS: защита канала, и заголовки безопасности HSTS, X-Content-Type-Options, X-Frame-Options и другие.
- Управление секретами
Секреты в приложениях: пароли, ключи, токены. Почему нельзя хранить их в коде и как использовать переменные окружения и хранилища.
- Инструменты безопасности: обзор
Обзор инструментов безопасности: OWASP ZAP, SAST-линтеры, SCA-сканеры зависимостей и сканеры секретов. Когда что применять.
- HTTPS, TLS и заголовки безопасности
7 Закон и этика
- Ответственность и согласие на тестирование
Граница закона в кибербезопасности: почему нельзя тестировать чужие системы без разрешения и какая ответственность за это (ст. 272-274 УК РФ).
- Легальные пути: CTF, bug bounty, пентест
Как развиваться в безопасности легально: CTF-соревнования, программы bug bounty, пентест по договору и сертификации.
- Ответственность и согласие на тестирование
8 Безопасность API: OWASP API Top 10
- BOLA: нарушение авторизации на уровне объекта
BOLA (IDOR) — самая частая уязвимость API: доступ к чужому объекту по id без проверки владения. Как возникает и как защищает серверная проверка прав на каждый объект.
- Сломанная аутентификация API и BFLA
Сломанная аутентификация API и BFLA: слабые токены, незащищённый refresh, отсутствие проверки роли на эндпоинт. Как защищает строгая проверка прав на каждую функцию.
- Чрезмерная выдача данных и mass assignment
Чрезмерная выдача данных и mass assignment в API: лишние поля в ответе и слепое присваивание входных полей модели. Защита — явные схемы ответа и allow-list полей на входе.
- Отсутствие лимитов и инвентаризация
Отсутствие rate limiting и пагинации в API ведёт к отказу в обслуживании и перебору. Теневые и устаревшие эндпоинты. Защита: лимиты потребления ресурсов и инвентаризация API.
- BOLA: нарушение авторизации на уровне объекта
9 Аутентификация, сессии и OAuth вглубь
- Правильное хранение паролей
Почему пароли нельзя хранить в plaintext и MD5, как работают bcrypt/argon2/scrypt, зачем соль и перец и как защититься от перебора. Хеширование на практике.
- Управление сессиями
Безопасные сессии: cookie с HttpOnly/Secure/SameSite, ротация идентификатора при логине, тайм-ауты, фиксация сессии (session fixation) и защита от неё.
- OAuth 2.0 и OpenID Connect: безопасность
Безопасность OAuth 2.0 и OpenID Connect: поток authorization code с PKCE, валидация redirect_uri и state, типичные ошибки и защита токенов доступа.
- JWT: ловушки и правильное применение
Ловушки JWT: атака alg=none, слабые ключи, отсутствие проверки подписи и срока, неверное хранение токена. Когда JWT не нужен и как применять его безопасно.
- Правильное хранение паролей
10 Продвинутые веб-уязвимости и защита
- Небезопасная десериализация
Почему десериализация недоверенных данных ведёт к выполнению кода на сервере и как защититься: форматы только для данных, проверка целостности, allow-list классов.
- Инъекции в шаблоны (SSTI)
Как пользовательский ввод в шаблонизаторе превращается в исполняемый код (SSTI) и как закрыть: статический шаблон, ввод как данные, автоэкранирование, песочница.
- HTTP Request Smuggling
Как рассинхронизация фронтенда и бэкенда по границе тела запроса создаёт HTTP Request Smuggling и как защититься: единый парсер, нормализация, HTTP/2.
- CORS-мисконфиги и prototype pollution
Слишком открытый CORS и prototype pollution в JavaScript: как возникают и как закрыть — allow-list источников, фильтрация ключей, Object.create(null), заморозка.
- Небезопасная десериализация
11 Безопасная разработка и DevSecOps
- SAST, DAST и SCA: автоматический поиск уязвимостей
Три семейства сканеров безопасности: SAST анализирует исходный код, DAST — работающее приложение, SCA — зависимости. Где их место в пайплайне и как читать находки.
- Безопасность зависимостей и supply chain
Уязвимые и устаревшие компоненты в OWASP Top 10: известные CVE в библиотеках, lock-файлы, проверка целостности, риск цепочки поставок и типосквоттинг.
- Управление секретами в разработке
Почему пароли и API-ключи не должны жить в коде и репозитории: переменные окружения, менеджеры секретов, ротация и сканирование на утёкшие ключи.
- Гейты безопасности в CI/CD и threat modeling
Как сделать проверки безопасности обязательным гейтом сборки: провал пайплайна на критичных находках, политика порогов и моделирование угроз в процессе разработки.
- SAST, DAST и SCA: автоматический поиск уязвимостей