未为某些 Laravel 路由设置 .htaccess X-Frame-Options 标头

Hen*_*Jan 2 .htaccess http-headers laravel

我们有一个 Laravel 应用程序 (Laravel 5.6.35),我们使用 /public 文件夹中的 .htaccess 设置 X-Frame-Options 标头。

<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>
Run Code Online (Sandbox Code Playgroud)

这在本地开发环境(Laravel、PHP 7.1.23、Apache2、Vagrant 上的 Debian 8.11)上运行良好。所有响应都设置了 X-Frame-Options 标头。

在测试服务器上进行完全相同的设置(除了它不是 Vagrant),只有静态内容(css、js、图像)包含 X-Frame-Options 标头,但所有 Laravel 生成的内容(通过 index.php 的任何内容)没有设置 X-Frame-Options 标头。

看似相同的设置怎么可能会有不同的结果呢?
我们如何为所有路由设置 X-Frame-Options 标头?

(两台服务器上都启用了 headers_module)

Hen*_*Jan 5

最后,我将 X-Frame-Options 添加到 .htaccess 中并作为 Laravel 中的中间件。这样 Laravel 路由和静态内容都/css可以/public正常工作。

文件:app/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        ...,
        \App\Http\Middleware\XFrameHeaders::class,
    ]
],
Run Code Online (Sandbox Code Playgroud)

新文件: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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在 .htaccess 中(删除“标头始终附加”部分):

<IfModule mod_headers.c>
  # Prevent click jacking
  Header set X-Frame-Options Deny
</IfModule>
Run Code Online (Sandbox Code Playgroud)