Laravel 5.8 :基础组件 —— CSRF 保护

本文介绍了Laravel 5.8中的CSRF保护机制,阐述了CSRF攻击的概念,并展示了如何在框架中获取和使用CSRF token。同时,讲解了关闭特定路由的CSRF验证方法,以及在表单中使用表单方法伪造的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是CSRF攻击

可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的,这种不安全也就是CSRF(Cross-site request forgery),中文名称:跨站请求伪造。

laravel 框架中为避免CSRF攻击,为每个 用户session生成一个CSRF token,该token用于验证登录用户和发起请求用户是否为同一个人。

laravel提供了一个全局函数csrf_token来获取该token值,因此只需在视图提交表单中添加如下代码即可在请求中带上token

<input type="hidden" name="token" value="<?php echo csrf_token()?>">
laravel中csrf验证机制默认是开启的。

csrf_token()的简化方法:{{csrf_field()}}  等价于上面一行代码。csrf_token()输出一个token值,而csrf_field输出了一整个input隐藏域。开发时这两个方法可以根据自己选择,但是在异步提交表单时必须使用csrf_token().

2、关闭csrf验证的方法:

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

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

排除部分路由的验证

protected $except=[
    //该出添加需要排除csrf验证的路由
    'home/test/test2',
    'home/test/test3'
];

排除所有路由的验证

protected $except=[
    '*'
];

任何时候在 Laravel 应用中定义 HTML 表单,都需要在表单中引入 CSRF 令牌字段,这样 CSRF 保护中间件才能够对请求进行验证。要想生成包含 CSRF 令牌的隐藏输入字段,可以使用 Blade 指令 @csrf

<form method="POST" action="/profile">
    @csrf
    ...
</form>

表单方法伪造

HTML 表单不支持 PUTPATCH 或者 DELETE 请求方法,因此,在 HTML 表单中调用 PUTPATCH 或 DELETE 路由时,需要添加一个隐藏的 _method 字段,其值被用作该表单的 HTTP 请求方法:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

还可以直接使用 Blade 指令 @method 来生成 _method 字段:

<form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
</form>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值