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