PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)

934 阅读1分钟

一、什么是 CSRF

`CSRF (Cross-site request forgery)`, 中文名称:`跨站请求伪造`。

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。

由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b463eb88792d4b0a9676ffcd8a040a09~tplv-k3u1fbpfcp-watermark.image)

二、Laravel 框架如何处理 CSRF

例如:通过另外一台未授权服务器访问我们的服务器,如果是恶意攻击会很尴尬,所以可以通过去服务器获取页面回来的时候,附带一个令牌,前端显示页面之后,有访问操作的时候需要将令牌带回服务器验证比较。
  • 重点:Laravel 框架如何处理 CSRF

    定义在 routes/web.php 文件中的路由,默认就有 CSRF 验证功能

    定义在 routes/api.php 文件中的路由,默认没有 CSRF 验证功能

  • CSRF 什么时候用?什么时候不用?

    前端页面路由需要用 CSRF,接口路由不能使用 CSRF


三、Laravel 框架如何排除指定路由不进行 CSRF 验证

  • 并不是所有请求都需要避免 CSRF 攻击,比如去第三方 API 获取数据的请求。

  • 可以通过在 VerifyCsrfToken (app/Http/Middleware/ VerifyCsrfToken.php)中间件中将要排除的请求 URL 添加到 $except 属性数组中。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        // 把想排除的路由规则卸载此数组中
        // 把该路由的规则不进行 CSRF 验证
        '/alipay'
    ];
}