Обзор платформы
SecureCodingHub — это интерактивная платформа обучения безопасному программированию, которая учит разработчиков выявлять и устранять уязвимости через практику. Каталог охватывает более 200 тем по четырём семействам OWASP top 10 (Web, API, Mobile, Client-Side), а интерфейс учащегося доступен на восьми языках.
Что такое SecureCodingHub?
SecureCodingHub предоставляет два режима обучения, созданных для развития реальных навыков безопасного программирования:
Режим практики
Задания по ревью кода, где разработчики находят уязвимые блоки кода и выбирают правильное исправление. Доступно для семи бэкенд-языков, шести фронтенд-стеков (React, Vue, Angular — каждый в TypeScript и JavaScript) и двух мобильных платформ.
Режим обучения
Интерактивные пошаговые сценарии атак с симулированной средой браузера. Разработчики проходят реальные цепочки атак, чтобы понять, как эксплуатируются уязвимости.
Поддерживаемые категории OWASP
Учебный контент организован по четырём основным стандартам безопасности OWASP:
| Категория | Темы | Описание |
|---|---|---|
| Web Top 10 | 10 модулей, ~88 тем | SQL Injection, XSS, CSRF, Broken Access Control и другие |
| API Top 10 | 10 модулей, ~45 тем | BOLA, Broken Authentication, Mass Assignment, SSRF и другие |
| Mobile Top 10 | 10 модулей, ~47 тем | Insecure Storage, WebView Injection, Certificate Pinning и другие |
| Client-Side Top 10 | 10 модулей, ~46 тем | DOM XSS, Prototype Pollution, Local Storage Secrets и другие |
Поддерживаемые языки и фреймворки
Бэкенд-языки
Фронтенд-фреймворки
Мобильные платформы
Роли пользователей
Внутри каждой организации пользователи имеют одну из двух ролей:
| Роль | Доступ |
|---|---|
| Администратор организации | Управляет пользователями, командами, заданиями, пользовательскими курсами, SSO, SCIM, SCORM, API-ключами, webhook'ами, журналом аудита, панелями соответствия и настройками организации. |
| Учащийся | Выполняет задания по практике и сценарии обучения, отслеживает личный прогресс и зарабатывает XP. |
Подробная разбивка в разделе Роли и разрешения.
Языки интерфейса
Интерфейс учащегося и администратора переведён на восемь языков. Пользователи выбирают язык интерфейса в верхней панели; выбор сохраняется между сессиями.
Переводы учебного контента выкатываются отдельно — сценарии заданий и тексты переводятся на тот же набор языков по мере локализации.
Панель управления — общий вид
Вот панель администратора, на которую Вы попадаете при первом входе:
Как два режима дополняют друг друга
Практика и Обучение — это не одно и то же упражнение в двух форматах. Режим практики нацелен на распознавание шаблонов на уровне кода: даны несколько строк кода — сможете ли Вы заметить небезопасный примитив и выбрать безопасную замену. Это быстро, повторяемо и лучше всего подходит для выработки мышечной памяти по широкому спектру типов уязвимостей. Разработчик, увидевший сорок вариантов SQL injection на Python и TypeScript, заметит следующий вариант в реальном pull request, не задумываясь. См. Режим практики для двухфазного процесса.
Режим обучения покрывает то, что Практика не может. Задание по ревью кода показывает Вам фрагмент, но реальные уязвимости живут в зазоре между двумя файлами, двумя сервисами или двумя слоями доверия. Сценарии обучения ставят Вас перед симулированным приложением и проводят по пути атакующего: разведка, эксплуатация, последствия, предотвращение. Этот контекст превращает чек-листное смягчение угрозы в дизайн-инстинкт. Используйте Практику для широты, Обучение для глубины. Новые сотрудники обычно начинают с одного сценария Обучения на категорию, прежде чем приступить к Практике в этой категории. См. Режим обучения для структуры сценариев.
Почему платформа структурирована вокруг классов уязвимостей
Каталог организован по категориям OWASP и типам уязвимостей, а не по языкам программирования. Это сделано намеренно. Уязвимости — это языконезависимые концепции: SQL injection — это вопрос того, как пользовательский ввод попадает в план запроса, независимо от того, написан запрос на Python, Java или Go. Платформа, организованная по языкам, изолирует знания. Python-разработчик, изучающий XSS на своём языке, никогда не увидит, что тот же примитив появляется в Vue, Angular и React с разными правилами экранирования. Организация по классам устраняет этот разрыв.
Система настроек стека обрабатывает специфические для языка детали ниже. Вы выбираете свой стек один раз через Настройкам стека, и каждое задание по умолчанию использует синтаксис, который Вы читаете свободно. Под капотом тот же класс уязвимостей преподаётся с тем же концептуальным каркасом во всех поддерживаемых стеках. Когда Вы позже перейдёте в другую команду или выучите новый язык, концепции перенесутся мгновенно, потому что они никогда не были привязаны к одному синтаксису.