在Codeigniter上,如果您使用注册表单创建成员并将数据发送到模型成员中的插入方法,那么如何过滤数据?
我正在寻找最好的MVC方式,因为我不想保存复选框“我同意......”的价值,既不是安全问题的价值,也不是这种事情的价值
在我的控制器中,可以(在发送到模型方法之前):
$posts = $this->input->post();
unset($posts['abcdef']);
...
但也可以在我的模型中使用(在使用insert方法之前):
function insert($data){
unset($data['abcdef']);
...
}
那么,你如何过滤数据呢?
答案 0 :(得分:1)
你发布工作的两种方式 - 但它们都是“黑名单”。
您应该在模型中使用“白名单”。这意味着您的模型将仅查找其所需的信息,并丢弃其余信息。这可以防止人们将额外的$ _POST数据插入到您不期望的表单中。
在模型中我做了类似
的事情function insert($inputs)
{
$white_list = array ('field1', 'field2', ... ,'field9');
foreach ($inputs as $post_id => $input)
{
if ( ! in_array ($post_id, $white_list))
{
unset($inputs[$post_id]);
}
}
// Now insert data here and sleep easy at night
}