Заголовок .htaccess X-Frame-Options не установлен для некоторых маршрутов Laravel - PullRequest
0 голосов
/ 26 октября 2018

У нас есть приложение Laravel (Laravel 5.6.35), в котором мы устанавливаем заголовок X-Frame-Options, используя .htaccess в папке / public.

<IfModule mod_rewrite.c>
    ...
</IfModule>
<IfModule mod_headers.c>
  # Prevent click jacking
  Header set X-Frame-Options Deny
  Header always append X-Frame-Options SAMEORIGIN
</IfModule>

Это прекрасно работает в локальной среде разработки(Laravel, PHP 7.1.23, Apache2, Debian 8.11 на Vagrant).Все ответы имеют установленный заголовок X-Frame-Options.

При одинаковых настройках (за исключением того, что это не Vagrant) на тестовом сервере только статический контент (css, js, images) содержит X-Frame-Заголовок параметров, но весь сгенерированный Laravel контент (все, что проходит через index.php) не имеет установленного заголовка X-Frame-Options.

Как может отличаться результат от, казалось бы, одинаковых настроек?
Как установить заголовок X-Frame-Options для всех маршрутов?

(модуль headers_module включен на обоих серверах)

1 Ответ

0 голосов
/ 06 мая 2019

В конце я добавил X-Frame-Options как в .htaccess, так и в качестве промежуточного программного обеспечения в Laravel.Таким образом, и маршруты Laravel, и статический контент, такой как /css и /public, работают нормально.

Файл: app / Http / Kernel.php

protected $middlewareGroups = [
    'web' => [
        ...,
        \App\Http\Middleware\XFrameHeaders::class,
    ]
],

Новый файл: app / Http /Middleware / XFrameHeaders.php

<?php namespace App\Http\Middleware;
use Closure;
class XFrameHeaders {
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        $response->header('X-Frame-Options', 'deny');
        //add more headers here
        return $response;
    }
}

И в .htaccess (убрать часть «заголовок всегда добавляется»):

<IfModule mod_headers.c>
  # Prevent click jacking
  Header set X-Frame-Options Deny
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...