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>
2.6 KiB
План — 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); фронт и схема не трогаются.
["test-driven-development"]
[
{"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"}
]
[
{"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).