【问题标题】:How to exclude CSRF token for specific domain?如何排除特定域的 CSRF 令牌?
【发布时间】:2018-04-21 15:40:12
【问题描述】:

我希望禁用特定域的 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 设置,因此使用了该框架附带的常用中间件文件。

任何帮助将不胜感激!

【问题讨论】:

  • 您可以覆盖isExceptArray 函数并在其中添加额外的逻辑。查看 BaseVerifier 的基本代码 (Illuminate\Foundation\Http\Middleware\VerifyCsrfToken)

标签: php laravel laravel-5 csrf


【解决方案1】:

您可以在 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);
}

【讨论】:

  • 谢谢 - 这会返回一条错误消息 Declaration of App\Http\Middleware\VerifyCsrfToken::handle($request, $next) should be compatible with Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::handle($request, Closure $next)... 有什么想法吗?
  • 在文件顶部添加use Closure;
  • 哎呀我的错误。现在显示,Call to undefined function App\Http\Middleware\parent()
  • 已更新,错字。
【解决方案2】:

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

只要在里面写下你的逻辑。

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 2017-12-14
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2018-08-19
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多