使用Laravel在标题的x-frame-options中添加多个域

时间:2018-05-22 13:22:50

标签: php laravel-5 http-headers

我想在X-Frame-Options中添加多个域,因为我必须授权facebook和messenger。

我尝试了很多东西,例如......

我创建了一个中间件:

<?php

namespace App\Http\Middleware;

use Closure;

class FrameHeadersMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $response->header('X-Frame-Options', 'ALLOW FROM https://www.messenger.com/');
        $response->header('X-Frame-Options', 'ALLOW FROM https://www.facebook.com/');

        return $response;
    }
}

但只添加了facebook ...

enter image description here

编辑:我使用http referer:

    <?php

    namespace App\Http\Middleware;

    use Closure;
    use Request;

    class FrameHeadersMiddleware
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            $response = $next($request);

            if(Request::server('HTTP_REFERER') === 'www.messenger.com'){
                $response->header('X-Frame-Options', 'ALLOW FROM https://www.messenger.com/');
            }

            if(Request::server('HTTP_REFERER') === 'www.facebook.com'){
                $response->header('X-Frame-Options', 'ALLOW FROM https://www.facebook.com/');
            }

            return $response;
        }
    }

1 个答案:

答案 0 :(得分:1)

您不能同时拥有多个X-Frame-Options标头。

请参阅the specification

  

2.3.2.3。 ALLOW-FROM的使用设计模式和示例场景             参数

     

作为&#34;允许来自&#34;字段仅支持一个序列化原点,在   服务器希望允许多个资源进行构建的情况   其内容,以下设计模式可以满足这一需求:

     
      
  1. 要在框架中呈现所请求内容的页面      将自己的原始信息提供给提供的服务器      要通过查询字符串参数构建的内容。

  2.   
  3. 服务器验证主机名是否符合其条件,以便      允许页面由目标资源构成。这个      例如,可以通过查找受信任的白名单来实现      允许构建页面的域名。例如,      对于Facebook&#34;喜欢&#34;按钮,服务器可以检查看到      提供的主机名与预期的主机名匹配      &#34;像&#34;按钮。

  4.   
  5. 服务器在&#34; X-Frame-Options:ALLOW-FROM&#34;中返回主机名。      如果在步骤#2中符合适当的标准。

  6.   
  7. 浏览器强制执行&#34; X-Frame-Options:ALLOW-FROM&#34;报头中。

  8.