- Laravel 教程
- Laravel - 主页
- Laravel - 概述
- Laravel - 安装
- Laravel - 应用程序结构
- Laravel - 配置
- Laravel - 路由
- Laravel - 中间件
- Laravel - 命名空间
- Laravel - 控制器
- Laravel - 请求
- Laravel-Cookie
- Laravel - 响应
- Laravel - 视图
- Laravel - 刀片模板
- Laravel - 重定向
- Laravel - 使用数据库
- Laravel - 错误和日志记录
- Laravel - 表单
- Laravel - 本地化
- Laravel - 会话
- Laravel - 验证
- Laravel - 文件上传
- Laravel - 发送电子邮件
- Laravel - AJAX
- Laravel - 错误处理
- Laravel - 事件处理
- Laravel - 外观
- Laravel - 合约
- Laravel - CSRF 保护
- Laravel - 身份验证
- Laravel - 授权
- Laravel - Artisan 控制台
- Laravel - 加密
- Laravel - 哈希
- 了解发布流程
- Laravel - 访客用户门
- Laravel - Artisan 命令
- Laravel - 分页自定义
- Laravel - 转储服务器
- Laravel - 操作 URL
- Laravel 有用资源
- Laravel - 快速指南
- Laravel - 有用的资源
- Laravel - 讨论
Laravel - CSRF 保护
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 应用程序的所有令牌,并包含使用Axios HTTP 库存储csrf-token 的元标记。
没有 CSRF 令牌的表单
考虑以下代码行。它们显示了一个表单,该表单接受两个参数作为输入:email和message。
<form> <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>
上述代码的结果是最终用户可以查看的如下形式 -
上面显示的表格将接受授权用户的任何输入信息。这可能会使 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 令牌。