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入门学习的几个不错的实例代码
Jul 13 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
PHP中数组的三种排序方法分享
May 07 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP安全之register_globals的on和off的区别
Jul 23 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 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代码
2006/12/06 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
vue实现购物车列表
2020/06/30 Javascript
python实现通过shelve修改对象实例
2014/09/26 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python统计中文字符数量的两种方法
2019/01/31 Python
Python中常用的os操作汇总
2020/11/05 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
给实习单位的感谢信
2014/02/01 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
服务整改报告
2014/11/06 职场文书
工商局个人工作总结
2015/03/03 职场文书
死亡诗社观后感
2015/06/05 职场文书
创业计划书之面包店
2019/09/12 职场文书
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Python学习之包与模块详解
2022/03/19 Python
V Rising 服务器搭建图文教程
2022/06/16 Servers