### CSRF配置
1、/system/config/csrf.php配置文件中,默认是开启CSRF验证的。当开启验证时,所有的表单数据都会通过CSRF进行验证。
2、CSRF验证开启时,在表单中必须创建一个标签:{{ csrf_field() }} 创建此标签后,系统会自动将表单中的数据由此提交并进行验证。相当于此标签会获取当前表单对象,然后通过此对象获取其中所有的数据,再对已经设置了要验证的字段进行验证。
### CSRF验证设置
1、在表单提交的页面上设置CSRF验证
1.1 要进行验证的字段,注意是二维数组,可以设置多个字段
Validate::make([ //设置验证字段
['us',required, '用户名不能为空', 3 ] //需要验证的字段
,['pd',required, '密码不能为空', 3 ]
]);
1.2 验证字段的参数(以上代码为例):
'us'、'pd' 这两个是要验证的字段名称
required 这是验证规则,有多种,具体查看文档
"用户名不能为空" 这是当验证不通过时的提示信息
3 这是验证条件 ,具体看文档,共有5种,3为必须验证
2、自定义验证方法:将第二个参数换成一个方法。可以是匿名的方法。
['us',function($value){alert();}, '用户名不能为空', 3 ]
$value此参数系统会自动传入,是要验证的项目的值;
function(){}是自定义的处理方法,可以写我们自己的解决办法
### CSRF验证不通过的处理
1、当验证不通过时有3种处理方式,这与/system/config/error.php配置文件有关,即validate的取值方式。
1.1 validate=show 此时是调用系统内的信息提示框,显示验证错误信息
1.2 validate=redirect 此时是跳转到指定的处理页面
1.3 validate=default 此时是由用户自行处理
2、第1种方式直接显示没有什么可说了的。如上设置后,如果验证不通过就会跳转到提示信息页面,然后返回。
3、跳转到指定页面的处理方式也没有太多可说,基本也是一样,当验证不勇冠时会按指定路径跳转。但有一点,此时会传递一个包含错误信息的变量数组:$errors 这个数组中的内容就是设置CSRF验证项时设置的错误提示信息。注意是一个数组。此值可以输送到指定的跳转页面,让用户自行来处理。
4、用户自行处理方式。此种方式下为用户提供了2个方法:
if(Validate::fail()){
View::with(['errArray'=>Validate::getError()]);
}else{
echo "用户名:".$_POST['us']."<br>密码:".$_POST['pd'];
}
Validate::fail() //判断验证是否通过
Validate::getError() //获取验证不通过的错误信息
这样做的好处就是例子中的使用方法,当验证不通过时,将错误的信息传送到接收处理页面,让用户判断怎么处理。
### 小结
1、/system/config/csrf.php配置文件中是否打开CSRF验证,默认是打开的。打开时必须在表单中增加指定的标签。
2、当在表单中设置了指定的标签后,系统中的IS_POST就可以使用了。就在其存在的前提下设置CSRF验证的项目内容等相关信息。
3、/system/config/error.php配置文件是错误信息处理配置。设置好相应的模式,根据配置设置处理方法。
(这里有个小问题:配置文件一旦修改,整个网站都会变,应当??)
4、只要开启CSRF验证,只要验证不通过都会有错误信息,第3中设置的不同只是系统如何处理错误信息的问题,不管你怎么处理,错误信息都是存在的。第一种中,将错误信息自动传送到了message方法显示;第三种方法,用户可以通过给定的方法,获取错误信息、将信息传递到指定地方进行处理。第二种方法中,自动将第三种方法中用户的处理方式自动传送到了指定的跳转页面。
### 复制自动验证的设置参数
required 必须输入
email 邮箱
http 网址
tel 固定电话
phone 手机
zipCode 邮政编码
num 数字范围 如:num:20,60
range 长度范围(位数)如 :range:5,20
maxlen 最大长度如:maxlen:10
minlen 最小长度如:minlen:10
regexp 正则如:regexp:/^\d{5,20}$/
confirm 两个字段值比对如:confirm:password2
china 验证中文
identity 身份证
unique 数据表值唯一如:unique:news,id (id为表主键)
exists 存在字段时验证失败
captcha 验证码
array(字段名,验证方法,错误信息,验证条件)
验证条件 (可选):
1 有字段时
2 值不为空时
3 必须处理 (默认)
4 值为空时
5 不存在字段时处理