ThinkPHP3.1新特性之字段合法性检测详解


Posted in PHP onJune 19, 2014

ThinkPHP3.1版增加了表单提交的字段合法性检测,可以更好的保护数据的安全性。这一特性是3.1安全特性中的一个重要部分。

表单字段合法性检测需要使用create方法创建数据对象的时候才能生效,具体有两种方式:

一、属性定义

可以给模型配置insertFields 和 updateFields属性用于新增和编辑表单设置,使用create方法创建数据对象的时候,不在定义范围内的属性将直接丢弃,避免表单提交非法数据。

insertFields 和 updateFields属性的设置采用字符串(逗号分割多个字段)或者数组的方式,例如:

class UserModel extends Model{
  protected $insertFields = array('account','password','nickname','email');
  protected $updateFields = array('nickname','email');
 }

设置的字段应该是实际的数据表字段,而不受字段映射的影响。

在使用的时候,我们调用create方法的时候,会根据提交类型自动识别insertFields和updateFields属性:

D('User')->create();

使用create方法创建数据对象的时候,新增用户数据的时候,就会屏蔽'account','password','nickname','email' 之外的字段,编辑的时候就会屏蔽'nickname','email'之外的字段。

下面是采用字符串定义的方式,同样有效:

class UserModel extends Model{
  protected $insertFields = 'account,password,nickname,email';
  protected $updateFields = 'nickname,email';
 }

二、方法调用

如果不想定义insertFields和updateFields属性,或者希望可以动态调用,可以在调用create方法之前直接调用field方法,例如,实现和上面的例子同样的作用:

在新增用户数据的时候,使用:

$User = M('User');
$User->field('account,password,nickname,email')->create();
$User->add();

而在更新用户数据的时候,使用:

$User = M('User');
$User->field('nickname,email')->create();
$User->where($map)->save();

这里的字段也是实际的数据表字段。field方法也可以使用数组方式。

使用字段合法性检测后,你不再需要担心用户在提交表单的时候注入非法字段数据了。显然第二种方式更加灵活一些,根据需要选择吧!

PHP 相关文章推荐
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
Yii框架创建cronjob定时任务的方法分析
May 23 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 #PHP
ThinkPHP的Widget扩展实例
Jun 19 #PHP
ThinkPHP3.1的Widget新用法
Jun 19 #PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 #PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 #PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 #PHP
php定界符
Jun 19 #PHP
You might like
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
微信小程序实现红包雨功能
2018/07/11 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python下MySQLdb用法实例分析
2015/06/08 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
python读取xlsx的方法
2018/12/25 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python map及filter函数使用方法解析
2020/08/06 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
应届护士推荐信
2013/11/16 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
民事调解书范文
2015/05/20 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android