ThinkPHP内置了表单令牌验证功能,可以有效防止表单的重复提交等安全防护。
表单令牌验证相关的配置参数有:
- 'TOKEN_ON'=>true, // 是否开启令牌验证
- 'TOKEN_NAME'=>'__hash__', // 令牌验证的表单隐藏字段名称
- 'TOKEN_TYPE'=>'md5', //令牌哈希验证规则 默认为MD5
- 'TOKEN_RESET'=>true, //令牌验证出错后是否重置令牌 默认为true
自动生成的隐藏域位于表单Form结束标志之前,如果希望自己控制隐藏域的位置,可以手动在表单页面添加{__TOKEN__} 标识,系统会在输出模板的时候自动替换。
如果页面中存在多个表单,建议添加{__TOKEN__}标识,并确保只有一个表单需要令牌验证。
如果个别页面输出不希望进行表单令牌验证,可以在控制器中的输出方法之前动态关闭表单令牌验证,例如:
- C('TOKEN_ON',false);
- $this->display();
- $User = M("User"); // 实例化User对象
- // 手动进行令牌验证
- if (!$User->autoCheckToken($_POST)){
- // 令牌验证错误
- }