我们有一个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、PHP7.1.23、Apache2、Vagrant上的Debian8.11)上工作得很好。所有响应都设置了X-Frame-Options标头。
在测试服务器上使用完全相同的设置(除了不是Vagrant),只有静态内容(css、js、图像)包含X-Frame-Options标头,但所有Laravel生成的内容(任何通过index.php的内容)都不设置X-Frame-Options标头。
看似相同的设置怎么会有不同的结果呢?
如何为所有路由设置X-Frame-Options报头?
(在两台服务器上都启用了headers_module )
发布于 2019-05-06 14:46:38
最后,我在.htaccess中添加了X-Frame选项,并将其作为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中(去掉'header always append‘部分):
<IfModule mod_headers.c>
# Prevent click jacking
Header set X-Frame-Options Deny
</IfModule>https://stackoverflow.com/questions/53008302
复制相似问题