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

lit*_*any 5 php iframe x-frame-options laravel laravel-5

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

确切的错误消息是:

Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
Run Code Online (Sandbox Code Playgroud)

我在之前的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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*rgo 8

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

跑:

grep -ri "X-Frame-Options" /etc/nginx        
Run Code Online (Sandbox Code Playgroud)

并检查输出:

/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY;
Run Code Online (Sandbox Code Playgroud)

DENY替换为SAMEORIGIN后,一切都按预期开始工作.


Joe*_*Joe 6

将标题设置为从框架到

X-Frame-Options: ALLOW-FROM https://example.com/
Run Code Online (Sandbox Code Playgroud)

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

您可以在laravel中使用中间件来做到这一点。

生成一个新的中间件。

php artisan make:middleware FrameHeadersMiddleware
Run Code Online (Sandbox Code Playgroud)

然后在刚创建的中间件的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;
 }
Run Code Online (Sandbox Code Playgroud)

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

protected $middleware = [
    App\Http\Middleware\FrameHeadersMiddleware::class
];
Run Code Online (Sandbox Code Playgroud)

或如果只想将其添加到特定路由,则添加到中间件组阵列之一。