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

时间:2018-10-26 12:01:22

标签: laravel .htaccess http-headers

我们有一个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>

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

虽然测试服务器上的设置完全相同(除了不是Vagrant),但只有静态内容(css,js,图像)包含X-Frame-Options标头,而所有Laravel生成的内容(所有通过索引的内容) .php)没有设置X-Frame-Options标头。

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

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

1 个答案:

答案 0 :(得分:0)

最后,我将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>