Files
portal/docs/superpowers/plans/2026-06-17-security-headers-mw-plan.md
T
Дмитрий 714d6885f9 feat(security): middleware безопасных HTTP-заголовков — закрытие ZAP Medium anti-clickjacking
X-Frame-Options SAMEORIGIN + X-Content-Type-Options nosniff + Referrer-Policy на все web-ответы (go-live аудит 17.06). CSP вынесен отдельно (SPA Vue+Vuetify). TDD-тест на публичном /.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 17:12:32 +03:00

48 lines
2.6 KiB
Markdown

# План — middleware безопасных HTTP-заголовков (TDD)
## Цель
Реализовать по TDD middleware `SecurityHeaders` (X-Frame-Options / X-Content-Type-Options
/ Referrer-Policy), зарегистрировать на web-группу в `bootstrap/app.php`, закрыть
ZAP Medium «Missing Anti-clickjacking Header». CSP вне объёма. Затрагивается только
backend (новый middleware + тест + правка bootstrap); фронт и схема не трогаются.
```skills-json
["test-driven-development"]
```
```steps-json
[
{"op":"Write","object":"app/tests/Feature/SecurityHeadersTest.php","ref":"H3"},
{"op":"Bash","object":"php app/artisan test tests/Feature/SecurityHeadersTest.php","ref":"H3"},
{"op":"Write","object":"app/app/Http/Middleware/SecurityHeaders.php","ref":"H1"},
{"op":"Edit","object":"app/bootstrap/app.php","ref":"H2"},
{"op":"Bash","object":"php app/artisan test tests/Feature/SecurityHeadersTest.php","ref":"H3"}
]
```
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"app/bootstrap/app.php","anchor":"withMiddleware(function"},
{"id":"vc2","kind":"EXTRACTED","ref":"docs/superpowers/specs/2026-06-17-security-headers-mw-spec-v2.md","anchor":"middleware безопасных HTTP-заголовков"}
]
```
## Переговоры
### Круг 1
TDD-поток: тест RED (заголовков ещё нет) → создать middleware → зарегистрировать в
web-группе → тест GREEN. Шаги: Write теста, Bash прогон (ожидаемо RED), Write
middleware, Edit `bootstrap/app.php`, Bash прогон (ожидаемо GREEN). Затрагивается
только backend (новый класс + тест + 2 строки в bootstrap); фронт `app/resources/js`,
схема БД и git не трогаются — пересечения с параллельной F-P1-сессией нет. Навык
`test-driven-development` объявлен и будет вызван до первого мутирующего шага.
### Круг 2
Прошу наставника зафиксировать содержательную forward-`recommendation`: подтвердить
корректность TDD-порядка (RED перед реализацией), достаточность покрытия (три
заголовка на публичном `/`), и что CSP осознанно вне объёма. Это чтобы вердикт был
содержательным, а не с пустым слотом рекомендации (квирк no_mentor_go).