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)
最后,我将 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)
| 归档时间: |
|
| 查看次数: |
3754 次 |
| 最近记录: |