这个codeigniter活动记录查询安全吗?

时间:2011-05-06 16:47:48

标签: codeigniter

我只在我的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);
}

2 个答案:

答案 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()则返回