Laravel拒绝在iFrame中显示为"' X-Frame-Options'到#SAMEORIGIN'。"

时间:2017-01-20 19:36:38

标签: php laravel iframe laravel-5 x-frame-options

所以我在Laravel中构建了一个表单并在外部进行托管,但是我想在HTML页面中显示它,但是我遇到了X-Frame-Options的问题。

确切的错误消息是:

Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

我在之前的StackOverflow答案中看到这是由于FrameGuard中间件,但此后已被删除,并且代码的问题行不在该文件中。

Laravel版本5.3。

我还尝试使用没有结果的地板在Nginx配置文件中设置X-Frame-Options:

sed -i 's/http\ {/http\ {\nadd_header X-Frame-Options SAMEORIGIN, false;\n\n/' /etc/nginx/nginx.conf

此错误发生在多个浏览器中,经过测试:Chrome& Safari浏览器

2 个答案:

答案 0 :(得分:7)

就我而言, nginx 是阻止访问的人。

执行命令

grep -ri "X-Frame-Options" /etc/nginx        

检查输出:

/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY;

DENY 替换为 SAMEORIGIN 后,所有内容都按预期启动。

答案 1 :(得分:5)

将帧的响应标题设置为

X-Frame-Options: ALLOW-FROM https://example.com/

其中example.com是请求表单的域。

您可以在laravel中使用中间件来执行此操作。

生成新的中间件。

php artisan make:middleware FrameHeadersMiddleware

然后在刚创建的中间件的handle函数中执行类似的操作:

namespace App\Http\Middleware;
use Closure;

public function handle($request, Closure $next)
{
     $response = $next($request);
     $response->header('X-Frame-Options', 'ALLOW FROM https://example.com/');
     return $response;
 }

然后,您可以将其添加到Kernel.php中的一个中间件数组

protected $middleware = [
    App\Http\Middleware\FrameHeadersMiddleware::class
];

如果您只想将其添加到特定路由,请转到其中一个中间件组数组。