thinkPHP3.2.3 中伪造表单的一种示例及解决方法
来源:互联网 发布:美国劳工部就业数据 编辑:程序博客网 时间:2024/06/07 02:30
在提交往数据库插入数据的表单的时候,如果不对表单字段进行过滤(限制),就容易被利用浏览器的开发调试工具对个别字段进行改名从而破坏数据库的内部数据,如下简单例子所示:
将表单的goods_desc字段改为id后将其之类最大值再提交表单数据:(因为此表id字段类型为mediumint所以写上其最大值)
上述操作之后再往数据库添加数据就会报错,因为 id 已经是该类型的最大值了,没法增加了。
解决方法:
thinkPHP3.2.3 内置了解决方案:
在模型中进行验证,定义protected $insertFields = "允许接收插入数据库的字段1,字段2,...",从而当你在控制器执行create()方法收集表单数据时就会严格依据 $insertFields 规定的字段来收集数据,不在范围内的字段直接过滤(无视)。
使用 create() 方法可以自动收集表单数据,第一个参数是数据,第二个参数为1时代表此表单是新增数据的表单(默认无 id 即添加操作),为2时代表此表单是修改数据的表单(默认通过表单是否含有隐藏域 id 判断)。
修改之后把表的 id 重置为1(update `tableName` set auto_increment=1;)或者直接清空表(truncate table `tableName`;)再尝试,结果如下:
同理,当你提交修改数据的表单时,以上应该修改为:
相应的模型内部定义:
protected $updateFields = 'id, goods_name,price,goods_desc,is_on_sale';
相应的控制器内部判断:
$goods = D('Goods'); //M('model');=>实例化父类model,无自定义model时使用;D('model');=>实例化自定义的model类。
if($goods->create(I('post.'),2)){ ... }
- thinkPHP3.2.3 中伪造表单的一种示例及解决方法
- thinkphp3.2.3中Class '?' not found的原因以及解决方法
- 多表单提交的一种解决方法
- 多表单提交的一种解决方法
- 关于OPENCV中imwrite出错的一种可能及解决方法
- DLL 中加入伪造的公司及描述信息
- Ajax提交表单中文乱码的一种解决方法
- HTTP_REFERER的用法及伪造
- HTTP_REFERER的用法及伪造
- 【thinkphp3.x】thinkphp3.x中display方法及show方法的使用
- PHP防止伪造跨站请求:表单中插入隐藏的随机串
- Thinkphp3.2.3 No input file specified 的解决方法
- ThinkPHP3.2.3上传PNG图有白底的解决方法
- 在tp3.2.3中使用 FormData 对象实现表单的文件上传功能遇到的一个问题及解决方法
- 在c文档中C2143问题出现的一种方式及解决方法
- ssh中read-only的一种解决方法
- 表单及表单中常用的控件
- 【thinkphp3.x】thinkphp3.x中自定义Action、Model及View
- 维护篇 17. 固件升级路径表 ❀ 飞塔 (Fortinet) 防火墙
- 全面理解Java内存模型
- HDU 6208 AC自动机 或 暴力?
- vs2008 MFC工程建立
- 使用ppa源方式安装javaJDK
- thinkPHP3.2.3 中伪造表单的一种示例及解决方法
- 1553: 发红包(2):红包来啦~
- 第三周——项目二—建设“顺序表”算法库
- 题目94-cigarettes
- HDU
- 前端一些记不太住的知识点加深印象
- jquery Validator 错误显示的方法
- Java中字符串的大小写转换
- 基于RN实现顶部tab导航切换