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 相关文章推荐
PHP 简单数组排序实现代码
Aug 05 PHP
PHP 防注入函数(格式化数据)
Aug 08 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP CURL中传递cookie的方法步骤
May 09 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 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
分享php多功能图片处理类
2016/05/15 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
ext 代码生成器
2009/08/07 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
Python获取当前时间的方法
2014/01/14 Python
对Python 语音识别框架详解
2018/12/24 Python
keras 多任务多loss实例
2020/06/22 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
一份Java笔试题
2012/02/21 面试题
《听鱼说话》教学反思
2014/02/15 职场文书
地理教师岗位职责
2014/03/16 职场文书
实习科室评语
2015/01/04 职场文书
建国大业电影观后感
2015/06/01 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
《废话连篇——致新手》——chinapizza
2022/04/05 无线电