確保 Laravel 網站不會被嵌入到其他站點中

心智極客發表於2019-10-16

HTTP 響應頭部中,有一個欄位,叫做 X-Frame-Options,該欄位可以用來指示是否允許自己的網站被嵌入到其他網站的 <iframe> 或者 <object> 標籤中。該頭部有三個值

  • DENY - 始終不允許嵌入,即使是同一個域名
  • SAMEORIGIN - 只能在相同域名中嵌入
  • ALLOW-FROM uri - 設定允許的域

通常,可以在 HTTP 代理中進行配置,比如 nginx

add_header X-Frame-Options SAMEORIGIN;

Laravel 自帶了用來「只允許同域名嵌入」的中介軟體,我們只需要在 /app/Http/Kernel.php 中新增即可

// /app/Http/Kernel.php
protected $middleware = [
    \Illuminate\Http\Middleware\FrameGuard::class,
];

該中介軟體的實現如下

<?php

namespace Illuminate\Http\Middleware;

use Closure;

class FrameGuard
{
    /**
     * Handle the given request and get the response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $response->headers->set('X-Frame-Options', 'SAMEORIGIN', false);

        return $response;
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章