目录
实现
没有 CSRF 令牌的表单
带有 CSRF 令牌的表单
首页 php框架 Laravel Laravel - CSRF 保护

Laravel - CSRF 保护

Aug 27, 2024 am 10:50 AM
laravel

CSRF 是指针对 Web 应用程序的跨站伪造攻击。 CSRF 攻击是系统经过身份验证的用户执行的未经授权的活动。因此,许多 Web 应用程序很容易受到这些攻击。

Laravel 通过以下方式提供 CSRF 保护 -

Laravel 包含一个内置的 CSRF 插件,可为每个活动用户会话生成令牌。这些令牌验证操作或请求是否由相关的经过身份验证的用户发送。

实现

本节详细讨论 Laravel 中 CSRF 保护的实现。在进一步进行 CSRF 保护之前,请注意以下几点 -

  • CSRF 是在 Web 应用程序内声明的 HTML 表单中实现的。您必须在表单中包含隐藏的经过验证的 CSRF 令牌,以便 Laravel 的 CSRF 保护中间件可以验证请求。语法如下所示 -

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • 您可以使用 JavaScript HTTP 库方便地构建 JavaScript 驱动的应用程序,因为这包括每个传出请求的 CSRF 令牌。

  • 文件即resources/assets/js/bootstrap.js注册了所有Laravel 应用程序的令牌,并包含 meta 标签,该标签存储 csrf-tokenAxios HTTP 库

没有 CSRF 令牌的表单

考虑以下代码行。它们显示了一个表单,该表单接受两个参数作为输入:emailmessage.

<form><form><br/>   <label> Email </label><br/>      <input type = "text" name = "email"/><br/>      <br/><br/>   <label> Message </label> <input type="text" name = "message"/><br/>   <input type = ”submit” name = ”submitButton” value = ”submit”><br/></form><!--输入类型=“提交”名称=“提交按钮”值=“提交”--><!--输入类型=“文本”名称=“电子邮件”--></form>

上述代码的结果是最终用户可以查看的如下所示的表单 -

Contact Form

上面显示的表单将接受来自授权用户的任何输入信息。这可能会使 Web 应用程序容易受到各种攻击。

请注意,提交按钮包含控制器部分中的功能。 postContact 函数在关联视图的控制器中使用。如下所示 -

public function postContact(Request $request) {
return $request-> all();
}

请注意,该表单不包含任何 CSRF 令牌,因此作为输入参数共享的敏感信息很容易受到各种攻击。

带有 CSRF 令牌的表单

以下代码行向您展示了使用 CSRF 令牌重新设计的表单−

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

实现的输出将返回带有令牌的 JSON,如下所示 -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "contact@tutorialspoint.com"
}

这是点击提交按钮时创建的 CSRF 令牌。

以上是Laravel - CSRF 保护的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1535
276
如何在Laravel中实施推荐系统? 如何在Laravel中实施推荐系统? Aug 02, 2025 am 06:55 AM

创建referrals表记录推荐关系,包含推荐人、被推荐人、推荐码及使用时间;2.在User模型中定义belongsToMany和hasMany关系以管理推荐数据;3.用户注册时生成唯一推荐码(可通过模型事件实现);4.注册时通过查询参数捕获推荐码,验证后建立推荐关系并防止自荐;5.当被推荐用户完成指定行为(如下单)时触发奖励机制;6.生成可分享的推荐链接,可使用Laravel签名URL增强安全性;7.在仪表板展示推荐统计信息,如总推荐数和已转化数;必须确保数据库约束、会话或Cookie持久化、

如何在Laravel应用中实现功能标志? 如何在Laravel应用中实现功能标志? Jul 30, 2025 am 01:45 AM

Chooseafeatureflagstrategysuchasconfig-based,database-driven,orthird-partytoolslikeFlagsmith.2.Setupadatabase-drivensystembycreatingamigrationforafeature_flagstablewithname,enabled,andrulesfields,thenrunthemigration.3.CreateaFeatureFlagmodelwithfilla

如何使用Laravel构建REST API? 如何使用Laravel构建REST API? Jul 30, 2025 am 03:41 AM

创建新Laravel项目并启动服务;2.生成模型、迁移和控制器并运行迁移;3.在routes/api.php中定义RESTful路由;4.在PostController中实现增删改查方法并返回JSON响应;5.使用Postman或curl测试API功能;6.可选地通过Sanctum添加API认证;最终得到一个结构清晰、功能完整且可扩展的LaravelRESTAPI,适用于实际应用。

Laravel的存储库合同是什么? Laravel的存储库合同是什么? Aug 03, 2025 am 12:10 AM

Repository模式是一种设计模式,用于解耦业务逻辑与数据访问逻辑。1.它通过接口(Contract)定义数据访问方法;2.具体操作由Repository类实现;3.控制器通过依赖注入使用接口,不直接接触数据源;4.优势包括代码整洁、可测试性强、便于维护和团队协作;5.适用于中大型项目,小型项目可直接使用模型。

拉拉维尔(Laravel)中有什么雄辩的ORM? 拉拉维尔(Laravel)中有什么雄辩的ORM? Jul 29, 2025 am 03:50 AM

EloquentORM是Laravel的内置对象关系映射系统,它通过PHP语法而非原生SQL操作数据库,使代码更简洁易维护;1.每个数据表对应一个模型类,每条记录作为模型实例存在;2.采用主动记录模式,模型实例可自行保存或更新;3.支持批量赋值,需在模型中定义$fillable属性以确保安全;4.提供强大的关系支持,如一对一、一对多、多对多等,通过方法调用即可访问关联数据;5.集成查询构造器,可链式调用where、orderBy等方法构建查询;6.支持访问器和修改器,可在获取或设置属性时格式化数

如何在Laravel雄辩中使用访问者和突变器? 如何在Laravel雄辩中使用访问者和突变器? Aug 02, 2025 am 08:32 AM

conscortorSandMutatorsInlaravel'SeloquentormallowyOutoFormAtormanIpulateModeModeLattributesWhenRetRievorvingOrstTingValues.1.useaccessorstocustomizeattributeretributeretrieval,sueascaScapapitalizingfirst_namevirst_nameviagetFirstnameAtTeameAtTeameAtTeameAtTeameAtTeameAttribute($ value)($ value)

使用在Laravel中验证的表单请求。 使用在Laravel中验证的表单请求。 Jul 30, 2025 am 05:04 AM

使用FormRequests可以将复杂的表单验证逻辑从控制器中抽离,提高代码可维护性和复用性。1.创建方式:通过Artisan命令make:request生成请求类;2.定义规则:在rules()方法中设置字段验证逻辑;3.控制器使用:直接以该类作为参数接收请求,Laravel自动验证;4.授权判断:通过authorize()方法控制用户权限;5.动态调整规则:根据请求内容动态返回不同验证规则。

如何在Laravel雄辩中使用子征服? 如何在Laravel雄辩中使用子征服? Aug 05, 2025 am 07:53 AM

laravelleloquentsuportsubqueriesInSelect,从哪里,andorderbyClauses启用Feflexibledataretievalwithoutrawsql; 1.UseselectSub()toaddcompentedColumnSlumnsLikePostCountCountCountCountCountPeruser; 2.Usefromsub; 2.usefromsub; 2.Usefromsub orclosolusoblesoblesoboledInfom()

See all articles