ThinkPHP中字段的映射
映射就是表示一个对应关系。
应用场景:在目前表单中的name值都和数据表中的字段名都是一样的,有一些人可能通过当前功能和表单的name值猜测出数据表的名字和表结构。后期就可能会找到系统的漏洞对系统的进行攻击。系统的安全性存在威胁。因此,我们可以使用一个障眼法,将name值来随机指定,name值就和表的字段不一致,那样别人就猜测不出表的结构。
因为如果字段和数据表中的字段不匹配,在操作的时候会被系统过滤,所以需要有一个对照列表,告知系统,不对应的name值是数据表中的字段。
字段映射和自动验证一样,没有语法,只有规则定义:
protected $_map = array(); // 字段映射定义
这是父类模型中的代码实现,因为成员属性是父类模型中的,所以不能在父类模型中直接修改,需要在自定义模型中定义,例如:
<?php
//创建模型
//命名空间
namespace Admin\Model;
//引用父类模型
use Think\Model;
//声明模型并继承父类
class DeptModel extends Model{
//字段映射定义
protected $_map = array(
'abc' => 'name',
'wasd' => 'sort'
);
}
因为数据对象中使用了字段映射的检查,所以,此处如果需要使用字段映射,则必须要使用数据对象的创建方法接收数据:
测试结果:
注意:在使用字段映射之后,被映射的字段后被放到数组的最后,按照字段映射的先后顺序进行排列。