Files
portal/app/tests/Feature/SecurityHeadersTest.php
T
Дмитрий a4a8ea31b9 refactor(security): единый источник security-заголовков — nginx
Убраны дубли HTTP-заголовков. nginx уже шлёт enforcing CSP, X-Frame-Options,
X-Content-Type-Options, Referrer-Policy, HSTS, Permissions-Policy, COOP, CORP
через add_header always. App-уровневый middleware SecurityHeaders дублировал
четыре из них и слал лишний CSP Report-Only; на проде add_header always плюс
PHP-заголовок давали дубль в ответе.

- удалён middleware SecurityHeaders и его регистрация в bootstrap/app.php
- SecurityHeadersTest переписан: фиксирует, что приложение эти заголовки не ставит

Прод-дедуп вступит в силу после деплоя. Verify локально 4 из 4 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 09:31:47 +03:00

31 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
/**
* Консолидация security-заголовков (18.06.2026): единый источник — nginx
* (/etc/nginx/sites-available/liderra, add_header ... always — CSP enforcing,
* X-Frame-Options, X-Content-Type-Options, Referrer-Policy, HSTS, Permissions-Policy,
* COOP/CORP). App-уровневый middleware SecurityHeaders удалён, чтобы не дублировать
* заголовки в ответе (на проде add_header always + PHP-заголовок = дубль).
*
* Этот тест фиксирует консолидацию: приложение само эти заголовки больше НЕ ставит.
* Бьём по публичному / (welcome SPA) — auth и БД не нужны.
*/
test('приложение НЕ ставит Content-Security-Policy-Report-Only (источник CSP — enforcing nginx)', function () {
$this->get('/')->assertHeaderMissing('Content-Security-Policy-Report-Only');
});
test('приложение НЕ дублирует X-Frame-Options (его ставит nginx)', function () {
$this->get('/')->assertHeaderMissing('X-Frame-Options');
});
test('приложение НЕ дублирует Referrer-Policy (его ставит nginx)', function () {
$this->get('/')->assertHeaderMissing('Referrer-Policy');
});
test('приложение НЕ дублирует X-Content-Type-Options (его ставит nginx)', function () {
$this->get('/')->assertHeaderMissing('X-Content-Type-Options');
});