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 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
试用php中oci8扩展
Jun 18 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
php操作access数据库的方法详解
Feb 22 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php适配器模式简单应用示例
Oct 23 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
php数组键名技巧小结
2015/02/17 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
Python中的zip函数使用示例
2015/01/29 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
学前班学生评语
2014/12/29 职场文书
二十年同学聚会感言
2015/07/30 职场文书
家庭聚会祝酒词
2015/08/11 职场文书