
Интерактивное обучение безопасному программированию с практическими SCORM-упражнениями, охватывающими уязвимости веб-приложений и API из OWASP Top 10, раскрытие секретов в Git и примеры устранения уязвимостей на 10+ языках.
40 бесплатных упражнений по безопасному программированию с открытым исходным кодом, которые обучают безопасности веб-приложений так, как учатся разработчики — через эксплуатацию реальных уязвимостей, таких как SQL-инъекции, межсайтовый скриптинг (XSS) и нарушение контроля доступа, с последующим написанием исправлений. Интерактивные SCORM-модули, охватывающие OWASP Top 10 для веб, API, безопасность Git-репозиториев и многое другое. Примеры исправлений на JavaScript, TypeScript, Java, C#, Python, Scala, PHP, Ruby, Go и Kotlin.

👥 Связаться с основателями | 🔗 Смотреть полную библиотеку | 🎮 Попробовать интерактивное DOM XSS-демо
Чтение OWASP Top 10 раз в год и сдача теста с вариантами ответов не предотвращает уязвимости веб-приложений в продакшене. Разработчикам нужно увидеть, что делает реальная эксплуатация — SQL-инъекцию, сливающую базу данных, межсайтовый скриптинг, угоняющий сессию, нарушение контроля доступа, раскрывающее данные другого пользователя, — а затем написать безопасный код, который это останавливает.
Каждое упражнение в этой библиотеке следует трёхфазной методологии: эксплуатация, трассировка, исправление.
Вы проводите практический пентест против намеренно уязвимого приложения — SQL-инъекцию против базы данных, XSS, срабатывающий в браузере, SSRF, достающий до конечной точки метаданных облака, — затем точно прослеживаете, как была внесена уязвимость, и применяете лучшие практики безопасного программирования для её устранения.
Упражнения охватывают:
Каждое упражнение завершается тестом с порогом прохождения 100%. К моменту, когда разработчик пишет продакшен-код, он уже эксплуатировал каждую распространённую уязвимость веб-приложений и знает лучшие практики безопасного программирования, которые её предотвращают.
Каждое упражнение поставляется в виде SCORM 1.2 .zip — импортируйте в любую LMS (Moodle, SAP SuccessFactors, Cornerstone, TalentLMS или любую SCORM-совместимую систему), встраивайте в свой конвейер обучения SDLC или просматривайте на SCORM Cloud перед запуском.
White-label — без логотипов, обратных ссылок и привязки к вендору. Используйте их в рамках программы DevSecOps, инициативы по безопасному SDLC или как самостоятельное обучение безопасности приложений.
Лицензировано по Creative Commons Attribution-NonCommercial 4.0 International. Вы можете использовать, адаптировать и распространять с указанием авторства в любых некоммерческих целях — внутреннее обучение, воркшопы, университетские курсы. Перепродажа контента как отдельного продукта не разрешена.
Нужно масштабное обучение безопасному программированию без запуска собственной LMS? Мы предоставляем корпоративную облачную платформу, специально созданную для обучения безопасности приложений инженерных команд. Свяжитесь с нами, чтобы увидеть её в деле.
Мультитенантность с самого начала — предоставляйте обучение безопасности приложений для всего портфеля клиентов из единой панели:
Заинтересованы? Свяжитесь с нами
Кликджекинг — Похитить клик по кнопке подтверждения в банке, наложив прозрачный iframe, перехватив реальное подтверждение и внедрив CSP frame-ancestors.
Внедрение команд — Присоединить вторую команду к серверному инструменту, изменив перехваченный запрос, наблюдая за утечкой серверных секретов и внедрив выполнение через список аргументов.
Компоненты с известными уязвимостями — Получить выполнение кода через устаревшую библиотеку, эксплуатируя опубликованный CVE, выполняя команды через специально созданную загрузку файла и обновляя версию со сканированием в CI.
Межсайтовая подделка запроса (CSRF) — Перевести деньги со страницы, которой жертва не доверяла, автоматически отправив межсайтовый перевод, понять, почему cookies передаются вместе с запросом, и добавить токены на сессию и SameSite.
Обход каталога — Прочитать системные файлы через ссылку на скачивание, выйдя за пределы целевой папки, вытащив /etc/passwd с сервера и применив канонизацию с последующей проверкой.
DOM XSS — Вызвать XSS, который сервер никогда не увидит, спрятав полезную нагрузку в хеше URL, проследив небезопасный sink innerHTML и заменив его на textContent.
Принудительный просмотр — Вытащить экспорт персональных данных сотрудников из несвязанного маршрута, анонимно обратившись к внутреннему URL, понять, почему сокрытие — это не контроль доступа, и включить принудительную аутентификацию на стороне сервера.
Горизонтальное повышение привилегий — Изменить одну цифру и прочитать данные другого клиента, пройдя IDOR с обеих сторон, перебирая последовательные идентификаторы записей и добавив недостающую проверку владельца.
Инъекция в заголовок Host — Перенаправить письмо сброса пароля на похожий домен, подделав заголовок X-Forwarded-Host, похитив токен сброса из перехода и зафиксировав настроенный базовый URL.
Нарушенная авторизация на уровне функций — Вызывать эндпоинты только для персонала из аккаунта с доступом только на чтение, обращаясь к админ-маршрутам как аналитик, вытащив список сотрудников и поставив в очередь выплату, и добавив защиту по ролям на уровне роутера.
Нарушенная авторизация на уровне объектов — Подменить id и прочитать данные другого райдера, изменив идентификатор объекта в запросе, собирая записи перебором id и обеспечив проверку владения объектом.
Нарушенная аутентификация пользователя — Подобрать шестизначный код входа перебором, атакуя endpoint верификации без ограничений, получив доступ только по email и добавив ограничение частоты запросов на аккаунт с кодом 429.
Чрезмерное раскрытие данных — Прочитать поля, которые UI никогда не показывает, сравнив отрендеренную страницу с сырым JSON, найти телефон, дату рождения и координаты, и сериализовать только белый список полей.
Некорректное управление инвентарём API — Прочитать записи через выведенную из эксплуатации версию API, подменив v2 на устаревшую v1, обойдя контроль, который обеспечивает новая версия, и вывести старые версии из эксплуатации с 410 Gone.
Инъекция — Превратить поисковую строку в полное чтение базы данных, выйдя за пределы запроса каталога, выгрузив таблицу пользователей через UNION и применив параметризацию, чтобы ввод оставался данными.
Недостаточное журналирование и мониторинг — Найти данные клиента и не оставить следов, обратившись к записи без тикета, понять, почему никто не может сопоставить это действие, и добавив аудит-записи и оповещения.
Массовое присваивание — Создать себе бонусный баланс с двумя лишними ключами, добавив поля в тело PATCH-запроса, записав атрибуты, которыми вы не должны владеть, и привязав только редактируемые поля.
Секреты в истории Git — Восстановить действующий API-ключ из коммита, который его удалил, пройдя по истории «зачищенного» конфиг-файла, переиспользовав ключ, который никогда не ротировали, и сначала ротируя его, а затем вычищая с помощью git filter-repo.
Открытый .git-каталог — Восстановить всю кодовую базу из одного публичного URL, найдя доступный для просмотра .git в корне веб-сайта, выгрузив репозиторий и восстановив исходный код, и разворачивая артефакты сборки вместо репозитория.
Закоммиченные секретные файлы — Склонировать публичный репозиторий и прочитать его закоммиченный .env, заметив секретные файлы, отслеживаемые с первого коммита, убрав их из отслеживания через git rm --cached и ротировав, а также добавив .gitignore и pre-commit хук.
Подделка автора коммита — Внедрить бэкдор под именем мейнтейнера, собрав данные об авторе из git log, увидев бейдж Unverified для подписи, и требуя подписанные коммиты от всех контрибьюторов, включая администраторов.
Обход защиты веток — Сделать force-push в main и пропустить ревью и CI, переписав историю в незащищённой ветке, отправляя непроверенный код прямо в продакшен, и требуя pull request'ы, ревьюеров и проверки.
Утёкшие токены доступа — Склонировать приватные репозитории с токеном из публичного gist, проверив, к чему может получить доступ токен с избыточными правами, отозвав и ротировав его вместо простого удаления gist, и выпуская детализированные и короткоживущие токены.
Вредоносные pull request'ы — Обнаружить бэкдор, спрятанный внутри безобидного исправления теста, читая полный diff вместо описания, отмечая правки вне области задачи в скриптах деплоя и усилив ревью с помощью CODEOWNERS и ограничений на форки.
Раскрытие секретов в CI/CD — Вытащить deploy-ключ прямо из публичного лога сборки, найдя шаг воркфлоу, который выводит секрет, запретив недоверенному вводу выполняться как shell-команды, и закрепив actions по SHA коммита с ротацией ключа.
Небезопасный редирект URL — Спрятать фишинговую страницу за настоящим логином, злоупотребив параметром next, понять, почему домен выглядит правильно, и разрешить только относительные цели.
Оставшийся отладочный код — Вытащить продакшен-секреты из забытого отладочного маршрута, найдя endpoint, сбрасывающий переменные окружения, прочитав JWT и секреты базы данных, и применив закрытый отказ (fail closed) с белым списком.
PII в URL — Извлечь личные данные прямо из ссылки, заметив идентификаторы в query-строках, проследив утечку в логи и referrer'ы и переписав их на непрозрачные токены.
Отражённый XSS — Создать вредоносный URL, который срабатывает в момент открытия, отразив полезную нагрузку через страницу поиска, понять сценарий «жертва кликает по ссылке» и экранировать на границе рендеринга.
Подделка серверных запросов (SSRF) — Заставить сервер получить свои облачные учётные данные, злоупотребив функцией превью ссылок, добравшись до endpoint метаданных и добавив валидацию исходящих адресов.
Фиксация сессии — Внедрить идентификатор сессии и получить доступ к аккаунту жертвы, зафиксировав известный id у жертвы, наблюдая, как логин переиспользует его, и выполняя регенерацию при каждом входе.
SQL-инъекция — Слить базу данных через одну незащищённую форму поиска, используя полезную нагрузку-тавтологию, выгрузив таблицы с помощью UNION SELECT и внедрив исправление с параметризацией.
Сохранённый XSS — Внедрить скрипт в комментарий и увидеть, как он сработает, сохранив полезную нагрузку в пользовательском контенте, наблюдая её выполнение у следующего посетителя и экранируя вывод при рендеринге.
Раскрытие токена в URL — Повторно использовать токен сессии, полученный из лога referrer, перехватив токен в URL редиректа, применив его к живому аккаунту и переместив в HttpOnly cookie.
Перечисление пользователей — Собрать список подтверждённых клиентов через форму входа, читая различающиеся тела ошибок, измеряя утечки по времени ответа и унифицируя ошибки и тайминги.
Вертикальное повышение привилегий — Подделать утверждение о роли и стать администратором, изменив токен сессии, перейдя от зрителя к админу и проверяя токены перед тем, как доверять им.
Слабая случайность — Предсказать токен сброса пароля и захватить аккаунт, семплируя токены генератора, восстановив состояние Math.random() и перейдя на crypto.randomBytes.
XXE-инъекция — Прочитать файл паролей через загрузку XML, отправив специально созданный заказ на покупку, разрешив внешнюю сущность и отключив разрешение сущностей.
Небезопасная конфигурация — Прочитать аккаунт авторизованного пользователя с любого сайта, отражая произвольный CORS-origin, применив страницу-приманку и ограничив CORS белым списком.
Неограниченное потребление ресурсов — Собрать каталог одним запросом огромного размера, задав размер страницы из запроса, вытащив 250 000 записей разом и ограничив размер страницы на стороне сервера.