### csrf防御
验证器
~~~
<?php
namespace application\example\validate;
use aaphp\Validate;
/**
* csrf 表单token验证
* Class CsrfValidate
* @package application\example\validate
*/
class CsrfValidate extends Validate
{
protected $rule = [
'_token_' => [
'token',
],
];
}
~~~
控制器
~~~
/**
* csrf 跨域表单验证
* @return string
*/
public function csrf()
{
$request = Request::instance();
if (!$request->isPost()) {
return $this->fetch();
}
$data = [
'usernamea' => $request->post('usernamea'),
'password' => $request->post('password'),
// 隐藏的token值
'_token_' => $request->post('_token_'),
];
$validate = new CsrfValidate();
if ($validate->check($data)) {
echo '验证通过<br/>';
} else {
echo '验证未通过,错误信息:<br/>';
var_dump($validate->getError());
}
}
~~~
视图
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>csrf</title>
</head>
<body>
<form action="" method="POST" style="border: 2px solid #00ffff;width: 500px">
<p>我有隐藏input,name="_token_" ,能通过token验证" </p>
<input type="hidden" name="_token_" value="{:aaphp\Validate::token()}"/>
<input type="text" name="username" value="aaphp"/>
<br/>
<br/>
<input type="text" name="password" value="123456"/>
<br/>
<br/>
<input type="submit" value="提交">
</form>
<hr>
<form action="" method="POST" style="border: 2px solid #ff0000;width: 500px">
<p>我没有隐藏input,不能通过token验证" </p>
<input type="text" name="username" value="aaphp"/>
<br/>
<br/>
<input type="text" name="password" value="123456"/>
<br/>
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>
~~~
- 序言
- 安装
- 基础
- 性能
- 例子
- 开发规范
- 目录结构
- 命名空间
- 自动加载
- 架构
- 入口文件
- 模块设计
- 系统常量
- 执行流程
- 路由
- 路由介绍
- 路由定义
- 规则路由
- 正则路由
- 配置
- 配置格式
- 配置文件
- 配置操作
- 控制器
- 新建控制器
- 地址访问
- 404
- 数据库
- 连接数据库
- 添加
- 删除
- 更新
- 查询
- 预处理
- 事务
- 模型
- 创建模型
- 实例化
- 插入数据
- 查询数据
- 修改数据
- 删除数据
- where条件
- field字段
- group分组
- order排序
- limit限制条数
- count统计
- avg平均数
- max最大值
- min最小值
- 链式操作
- 获取sql
- 视图
- 创建
- 传值
- 载入
- 函数
- 标签
- if
- foreach
- include
- 常量替换
- xss过滤
- 验证
- 创建验证类
- 验证规则
- 自定义错误
- 执行验证
- csrf防御
- 请求
- 请求相关名称
- 请求相关参数
- 请求传参
- 获取json数据
- 工具
- 文件上传
- 数据分页
- Url生成
- 缓存
- 模版编译
- 命令行
- 命令行控制器
- 数据库迁移