【发布时间】:2018-03-15 21:32:09
【问题描述】:
我正在尝试修复我的标题。我在访问我的页面时检查网络请求时看到两个错误:
1) X-FRAME-OPTIONS: SAMEORIGIN 显示两次:
Cache-Control:no-cache
Connection:Keep-Alive
Content-Encoding:gzip
Content-Type:text/html; charset=UTF-8
Date:Wed, 04 Oct 2017 12:58:30 GMT
Keep-Alive:timeout=3, max=1000
Server:Apache
Set-Cookie:laravel_session=eifQ%3D%3D; expires=Wed, 04-Oct-2017 14:58:30 GMT; Max-Age=7200; path=/; secure; httponly
Set-Cookie:XSRF-TOKEN=n0%3D; expires=Wed, 04-Oct-2017 14:58:30 GMT; Max-Age=7200; path=/
Transfer-Encoding:chunked
X-CDN:Incapsula
X-Frame-Options:SAMEORIGIN * <-------------- HERE
X-Frame-Options:SAMEORIGIN * <-------------- HERE
X-Iinfo:7-6626704-6651371 NNNN CT(0 0 0) RT(1507121414380 495318) q(0 1 1 -1) r(2 2) U16
X-XSS-Protection:%E2%80%9C1;mode=block%E2%80%9D <-------- Strange Encoding here...
2) 我可以在X-XSS-PROTECTION 的控制台上看到以下错误:
解析标头 X-XSS-Protection 时出错:â1;mode=blockâ:在字符位置 0 处预期为 0 或 1。将应用默认保护。
我正在使用 Laravel 5.0。自 Laravel 4.2 起,FrameGuard.php 中间件默认处于不活动状态,但如果需要,您可以选择启用它。当它被禁用时,我看到了上述错误,我真的不明白为什么,所以我的第一个想法是通过实际使用该中间件来覆盖这些标头。
当我添加包含以下代码的 Illuminate\Http\Middleware\FrameGuard.php 中间件时,似乎没有任何变化:
public function handle($request, Closure $next)
{
$response = $next($request);
$response->headers->set('X-XSS-Protection', '1; mode=block');
$response->headers->set('Content-Type','text/html; charset=UTF-8');
$response->headers->set('X-Frame-Options', 'SAMEORIGIN', true);
return $response;
}
我还使用提供 Facebook 身份验证的 Socialite。它是否有可能修改任何标题?
【问题讨论】:
-
你设置了中间件的优先级,让你的中间件被调用到最后了吗?当您在中间件中获得响应时,您可能可以调试损坏的标头是否已经存在。另外,如果我使用
decodeURIComponent("%E2%80%9C1")="“1"。这意味着错误可能只是由您在某个地方通过使用智能引用而不是正常引用引入的。您是否从网络或 word 文档中复制了一些代码?您还可以使用grep -r "“" .检测哪个文件具有智能引用 -
这有什么更新吗?
标签: php laravel laravel-5 http-headers x-frame-options