如何排除特定域的CSRF令牌?

时间:2017-11-08 19:45:14

标签: php laravel laravel-5 csrf

我希望禁用特定域的CSRF验证令牌。例如,我的EC2实例。这样我就可以在我的EC2实例上运行实时跨浏览器测试而不会出现任何问题。

我发现有很多关于更新应用中特定路由的中间件目录VerifyCsrfToken的信息,但没有关于如何检查主机或域的信息。我可以在受保护的URI中使用/*

class VerifyCsrfToken extends BaseVerifier
{
    /**
    * The URIs that should be excluded from CSRF verification.
    *
    * @var array
    */

    protected $except = [
        '/*'
    ];
}

但是,出于显而易见的原因,我宁愿不使用这种方法。

我正在使用标准的Laravel 5.3设置,因此使用此框架附带的常用中间件文件。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以检查用于在CSRF中间件中发出请求的主机并采取相应措施。在 VerifyCsrfToken 类中添加以下内容:

public function handle($request, Closure $next)
{
    if ($request->getHost() == 'some.host.without.csrf.protection') {
        // skip CSRF check
        return $next($request);
    }

    return parent::handle($request, $next);
}

答案 1 :(得分:0)

我认为最好的方法是覆盖父类isExceptArray中编写的Illuminate\Foundation\Http\Middleware\VerifyCsrfToken函数。

只需在那里写下你的逻辑。