← [Главная](../README.md)

# Раздел 06 — Безопасность кода

Инструменты и практики, которые проверяют **код и артефакты** до и сразу после сборки: статический анализ, динамическое тестирование, зависимости, секреты и quality gates в CI.

## Зачем этот раздел

Код — главный источник уязвимостей. Раздел показывает, как встроить проверки в привычный pipeline, чтобы разработчик получал feedback за минуты, а не после pentest через полгода.

## Карта тем

| Тема | Файл | Что проверяет |
|------|------|---------------|
| SAST | [sast.md](sast.md) | Исходный код без запуска приложения |
| DAST и pentest lite | [dast-i-pentest-lite.md](dast-i-pentest-lite.md) | Работающее приложение «снаружи» |
| SCA | [sca-zavisimosti.md](sca-zavisimosti.md) | Сторонние библиотеки и CVE |
| Secrets scanning | [secrets-scanning.md](secrets-scanning.md) | Токены и ключи в git |
| Quality gates | [quality-gates-v-ci.md](quality-gates-v-ci.md) | Политики pass/fail в pipeline |

## Рекомендуемый порядок

```
secrets-scanning → sca-zavisimosti → sast → quality-gates-v-ci → dast-i-pentest-lite
```

Секреты и SCA дают быстрый ROI; SAST и gates структурируют процесс; DAST — на staging ближе к релизу.

## Цель раздела

Вы сможете описать минимальный **secure pipeline** для небольшого проекта: какие сканеры где стоят, что блокирует merge, и как triage findings.

## Предварительно

- [Раздел 05 — Secure SDLC](../05-secure-sdlc/README.md) (shift-left, требования).
- CI/CD: понимание stages (build, test, deploy).

## Время

| Формат | Оценка |
|--------|--------|
| Чтение | 3–4 часа |
| Настройка demo pipeline | 4–8 часов |

## Сравнение типов сканирования

| Тип | Когда | Плюсы | Минусы |
|-----|-------|-------|--------|
| **SAST** | PR / build | Ранно, в diff | False positives |
| **SCA** | PR / daily | CVE в deps | Не ваш код |
| **Secrets** | pre-commit + CI | Блок утечек | Не найдёт runtime secrets |
| **DAST** | staging | Реальные HTTP paths | Медленно, flaky |
| **Pentest** | periodic | Human creativity | Дорого, редко |

## Самопроверка

- [ ] Могу объяснить разницу SAST / SCA / DAST одной фразой каждый.
- [ ] Знаю, что должно блокировать merge vs только warn.
- [ ] Понимаю, зачем secrets scan и на pre-commit, и в CI.

## Минимальный secure pipeline (reference)

Пример stages для маленького Node.js сервиса:

| Stage | Tool (пример) | Gate |
|-------|---------------|------|
| pre-commit | detect-secrets | block local commit |
| pr-secrets | gitleaks | fail |
| pr-sca | trivy fs / npm audit | fail on HIGH+ |
| pr-sast | semgrep | fail on CRITICAL |
| build | docker build | — |
| image-scan | trivy image | fail on CRITICAL |
| deploy-staging | helm | — |
| nightly-dast | OWASP ZAP baseline | ticket on HIGH |

Адаптируйте под язык и платформу — порядок важнее конкретного vendor.

## Типичные ошибки

| Ошибка | Результат |
|--------|-----------|
| Только SAST, без SCA | CVE в lodash не найден |
| Scan без fail policy | «У нас всё сканируется» — theater |
| DAST только на prod | Outages + legal risk |
| Игнор baseline debt | Gate никогда не включат |

## Глоссарий раздела

| Аббревиатура | Расшифровка |
|--------------|-------------|
| **SAST** | Static Application Security Testing |
| **DAST** | Dynamic Application Security Testing |
| **SCA** | Software Composition Analysis |
| **SARIF** | Static Analysis Results Interchange Format |
| **SBOM** | Software Bill of Materials |
| **CVE** | Common Vulnerabilities and Exposures |

## Практика

Рекомендуем параллельно с чтением:

1. Запустить `gitleaks detect` на учебном repo (без real keys).
2. Посмотреть отчёт `npm audit` или `trivy fs .`.
3. Открыть sample SARIF в GitHub Security tab (если доступно).
4. Составить таблицу «finding → owner → SLA» для 5 вымышленных CVE.

См. также [лабораторные в разделе 11](../11-praktikum/README.md).

## Самопроверка (раздел)

- [ ] Могу нарисовать pipeline diagram с 5 security stages.
- [ ] Знаю, какой scan первым включить в greenfield проект.
- [ ] Понимаю разницу warn vs fail gate на примере SCA.

## Дальше

[Secrets scanning](secrets-scanning.md) — начните с самого болезненного и быстрого win.
