八PHP框架Laravel学习笔记——表单伪造和 CSRF 保护

Posted 小小白学计算机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八PHP框架Laravel学习笔记——表单伪造和 CSRF 保护相关的知识,希望对你有一定的参考价值。

一.表单伪造

  1. 之前一直用的 GET 请求方式,而表单可以实现 POST 方式,我们来实验下:

  2. 先在 TaskController 创建两个方法,一个表单页,一个接受表单数据路由;

public function form() { 
	return view('form'); 
}

在这里插入图片描述
在这里插入图片描述

//表单页

Route::get('task/form', 'TaskController@form'); 

//接受表单数据

Route::any('task/getform', function () { 
	return \\Illuminate\\Support\\Facades\\Request::method(); 
}); 

在这里插入图片描述

  1. 表单页以 post 发送,路由也使用 post 接受,以下表单提交会出现 419 错误;
<form action="/task/getform" method="post"> 
	用户名:<input type="text" name="user"> 
	<button type="submit">提交</button> 
</form> 

在这里插入图片描述

  1. 这是为了避免被跨站请求伪造攻击,框架提供了 CSRF 令牌保护,请求时验证;
<input type="hidden" name="_token" value="{{csrf_token()}}"> 

在这里插入图片描述

  1. 表单可以实现 POST 提交方式,那其它提交方式该如何实现呢?可以采用伪造技术;
<input type="hidden" name="_method" value="PUT"> 
  1. 对于 CSRF 令牌保护和表单伪造提交方式,也支持快捷方式的声明,如下:
@csrf 
@method('PUT') 
  1. 如果我们想让某些 URL 关闭 csrf 验证,可以设置 csrf 白名单;

  2. 白名单具体设置位置在:中间件目录下的 VerifyCsrfToken.php 文件;
    在这里插入图片描述

  3. 当然,不建议直接注释掉这个验证 csrf 功能的中间件;
    在这里插入图片描述

以上是关于八PHP框架Laravel学习笔记——表单伪造和 CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

PHP笔记-laravel框架记录session中flash()的一次应用

四PHP框架Laravel学习笔记——路由命名和分组

六PHP框架Laravel学习笔记——响应设置和重定向

php laravel框架学习笔记 基本工作原理

十八PHP框架Laravel学习笔记——模型的增删改

Laravel笔记-使用php命令创建模型&创建数据库迁移文件&生成仿真数据(伪造数据)