我只在我的ci网站上使用此代码作为管理员端,这个数据库插入是否安全?
function addCategory(){
$data = array(
'name'=> $_POST['name'],
'shortdesc'=>$_POST['shortdesc'],
'longdesc' => $_POST['longdesc'],
'status'=>$_POST['status'],
'parentid' => $_POST['parentid']
);
$this->db->insert('categories', $data);
}
答案 0 :(得分:5)
Code Igniter会为您正确地转义这些值。话虽这么说,你应该使用输入类来获取你的帖子数据;如果您在配置文件中将其设置为这样,它不仅可以自动保护vs XSS,如果未设置任何值,您将不会收到警告:
$name = $this->input->post('name');
$data = array(
'name' => $name,
... etc ...
);
您也可以将函数调用直接放在数组中:
$data = array(
'name' => $this->input->post('name'),
... etc ...
);
或者,如果您想在POST值不存在时设置默认值:
// php 5.3+
$data = array(
'name' => $this->input->post('name') ?: 'default'
);
// older
$data = array(
'name' => $this->input->post('name') ? $this->input->post('name') : 'default'
);
答案 1 :(得分:2)
我建议以这种方式处理它
$data = array();
foreach($_POST as $key => value)
{
if ( $this->input->post($key) ) // if a value is set
{
$data[$key] = $this->input->post($key, true); //protect against xss
}
}
$this->db->insert('catagories', $data);
这样,如果未设置您指定的任何静态值,则不会将它们作为false
添加到数据插入中(如果未设置$this->input->post()
则返回