【问题标题】:Laravel refusing to display in iFrame as "'X-Frame-Options' to 'SAMEORIGIN'."Laravel 拒绝在 iFrame 中显示为“'X-Frame-Options' to 'SAMEORIGIN'”。
【发布时间】:2017-06-05 21:12:25
【问题描述】:

所以我在 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

【问题讨论】:

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


    【解决方案1】:

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

    运行:

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

    并检查输出:

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

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

    【讨论】:

    • 您好,先生,这也是我的问题。相反,我只是注释掉了这条线,因为我的愿望是让我的页面可以在任何地方进行 iframe
    【解决方案2】:

    将帧响应的标题设置为

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

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

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

    生成一个新的中间件。

    php artisan make:middleware FrameHeadersMiddleware
    

    然后在您刚刚创建的中间件的句柄函数中执行以下操作:

    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
    ];
    

    如果您只想将其添加到特定路由,则可以添加到中间件组数组之一。

    【讨论】:

    • 谢谢,我已经尝试过了,但是在 nginx 配置文件中不起作用,还有其他地方可以尝试吗?
    • @littleswany 该标题是否在表单的响应中返回?
    • 即使设置为您在 nginx 中的答案,也不会返回相同的来源选项,所以我认为 laravel 正在改变它
    • 尝试使用中间件将标头添加到所有传出响应中。
    • 我该怎么做呢?
    猜你喜欢
    • 2016-03-21
    • 2014-07-27
    • 2015-11-25
    • 2016-07-13
    • 2020-07-02
    • 2013-12-28
    • 2017-05-22
    相关资源
    最近更新 更多