Отправка решений¶
Как это работает¶
- Пользователь отправляет код через Submit (
POST /api/v1/problems/{id}/submit). - Submission попадает в очередь RabbitMQ с указанием языка (
python,javascript,go,java). - Per-language checker-воркер забирает задачу.
- Код запускается в Docker-контейнере с
seccomp-профилем, без сети, с CPU/memory-лимитами. - Прогоняются security-тесты и функциональные тесты.
- Вердикт отправляется обратно в API.
- Фронтенд получает обновление через WebSocket (
/api/v1/submissions/ws/{id}).
Вердикты¶
| Вердикт | Что значит |
|---|---|
| Accepted | Уязвимость закрыта, функциональные тесты прошли. Баллы начислены. |
| Wrong Answer | Security-тест нашёл уязвимость или функциональный тест упал. |
| Runtime Error | Код упал при выполнении (exception, segfault, неправильный exit code). |
| Time Limit Exceeded | Контейнер не уложился в лимит (обычно 30 секунд). |
| Memory Limit Exceeded | Превышен лимит RAM. |
| Compilation Error | Код не компилируется (для Go / Java). |
| Internal Error | Редкий случай: проблема в инфраструктуре. Попробуйте повторить. |
Ограничения¶
- Rate limit: N отправок в минуту (точные значения зависят от тарифа).
- Размер кода: ограничен — обычно достаточно для типичной задачи.
- Таймаут выполнения: 30 секунд на контейнер.
AI-анализ¶
Если включён AI-анализ (настройка тарифа), после Wrong Answer вы получаете:
- Объяснение корня проблемы.
- Указание на конкретные строки в вашем коде.
- Ссылки на лучшие практики.
Результат кешируется на 24 часа — повторная отправка того же кода не стоит AI-кредитов.
История отправок¶
В профиле пользователя доступна история всех submissions: время, задача, язык, вердикт, код. Удобно для ретроспективы по проваленным задачам.
Полезные ресурсы¶
После Accepted открывается блок Полезные ресурсы со ссылками двух типов:
- Defense — как правильно защищаться от этого класса уязвимостей (OWASP Cheat Sheets, CWE, статьи вендоров).
- Practice / Exploitation — где можно отработать эксплойт (PortSwigger Web Security Academy, HackTricks, CTF).
Ресурсы подтягиваются по типу уязвимости — разные для XSS, SQLi, CSRF и т.п.