Назначение: минимальный учебный проект для семинаров S06–S08 (Secure Coding → Containerization → CI). Шаблон намеренно небезопасен (SQL injection, XSS, слабая аутентификация), чтобы у студентов были патчи для S06.
- Python 3.11+
- FastAPI + Uvicorn
- SQLite (в файле
app.db) - Jinja2 (шаблоны)
- pytest (+ httpx) для автотестов
⚠️ Тут приведён примерный порядок; ваш one-liner под DV вы сформулируете сами на S06.
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python scripts/init_db.py
uvicorn app.main:app --reloadОткройте: http://127.0.0.1:8000/ и попробуйте:
/echo?msg=<script>alert(1)</script>— XSS (намеренно небезопасно)POST /loginс JSON{"username": "admin'-- ", "password": "x"}— обход логина за счёт SQLi/search?q=' OR '1'='1— выдаёт все записи (SQLi)
pytest -qИз коробки тесты падают, пока вы не примените патчи безопасности.
- Параметризация SQL (sqlite параметризованные запросы)
- Убрать небезопасный
|safeв шаблоне (или экранировать вывод) - Усилить валидацию входных данных и обработку ошибок
- Довести тесты до зелёных и сформировать one-liner для DV
- Складывать отчёты/логи в
EVIDENCE/S06/
MIT (только в учебных целях; уязвимости добавлены намеренно).
Быстрый старт:
docker build -t secdev-seed:latest .
docker run --rm -p 8000:8000 secdev-seed:latest
# или
docker compose up --buildTODO на S07:
- Убедиться, что ваш one-liner из S06 переносится в контейнерный сценарий (entrypoint/команда).
- Добавить настройки безопасности (user non-root, ограничение прав, healthcheck).
В репозитории уже есть .github/workflows/ci.yml с шагами: checkout → python → cache pip → deps → init DB → pytest → upload artifacts.
TODO на S08:
- Довести тесты до зелёных (иначе CI красный — это нормально на старте).
- Проверить, что артефакты попадают в
EVIDENCE/S08/и доступны в job artifacts. - (Опционально) добавить публикацию HTML-отчётов, coverage и т. п.