Laravel 下的伪造跨站请求保护 CSRF#

本文介绍了Laravel框架如何通过自动生成和验证CSRF令牌来保护应用程序免受跨站请求伪造攻击。包括如何在HTML表单中加入CSRF令牌,如何在JavaScript驱动的应用中自动附加CSRF令牌,以及如何设置CSRF白名单。

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

简介#

Laravel 可以轻松地保护应用程序免受跨站请求伪造(CSRF) 的攻击。跨站请求伪造是一种恶意的攻击,

他凭借已通过身份验证的用户身份来运行未经过授权的命令。

Laravel 会自动为每个活跃用户的会话生成一个 CSRF [令牌] 。该令牌用于验证经过身份验证的用户是向应用程序

发出请求的用户。

任何情况下当你在应用程序中定义HTML 表单时,都应该在在表单中包含一个隐藏的CSRF令牌字段,以便CSRF

保护中间件可以验证该请求,可以使用辅助函数csrf_field 来生成令牌字段:

{{csrf_field()}}

包含在web 中间件组里的 VerifyCsrfTken 中间件会自动验证请求里的令牌是否与存储在会话中令牌匹配。

CDRF令牌 & JavaScript#

构建由Javascript 驱动的应用时,可以很方便的让Javascript HTTP 函数库在发起每一个请求时自动附上 CDRF令牌。

默认情况下,resources/assets/js/bootstrap.js 文件会用 Axios HTTP 函数库注册的 csrf-token meta 标签中的值。如果你不使用这个函数库,

你需要手动为你的应用配置次行为。

CDRF 白名单#

有时候你可能希望设置一组并不需要CSRF保护的URI.例如,如果你正在使用Stripe 处理付款并使用了他们的webhook

系统,你会需要从CSRF的保护中排除Strpe Webhook 处理程序路由,因为Stripe 并不会给你的路由发送CSRF令牌。

你可以把这类路由放到 routes/web.php 外,因为RouteServiceProvider 的web 中间件适用于该文件中的所有路由。

不过,你也可以通过将这类url添加到VerifyCsrfToken 中间件中的 $except 属性来排除对这类路由的CSRF保护:

X-CSRF-TOKEN#

除了检查POST参数中的CSRF令牌外,VerifyCsrfToken 中间件还会检查x-csrf-token 请求头。你可以将令牌保存在HTML

meta标签中:

<meta name="csrf-token" content="{{csrf_token()}}">

然后你就可以使用类似jQuery的库自动将令牌添加到所有请求头信息中。这可以为基于AJAX的应用提供简单、方便得

的 CSRF 保护:

$.ajaxSetup({

  headers:{

  'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')

}

});

X-XSRF-TOKEN#

Laravel将当前的CSRF令牌储存在有框架生成的每个响应中包含的一个xsrf-token cookie中。为方便起见,你可以使用

cookie 值来设置x-xsrf-token 请求头,而一些 javascript 框架和库(如Angular 和Axios)会自动将这个值添加到

x-xsrf-token头中。

 

转载于:https://www.cnblogs.com/simadongyang/p/8117784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值