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

这个codeigniter活动记录查询安全吗?,codeigniter,Codeigniter,我只在我的ci站点的管理端使用此代码,此db insert安全吗 function addCategory(){ $data = array( 'name'=> $_POST['name'], 'shortdesc'=>$_POST['shortdesc'], 'longdesc' => $_POST['longdesc'], 'status'=>$_POST['status'], 'parentid' => $_PO

我只在我的ci站点的管理端使用此代码,此db insert安全吗

function addCategory(){
    $data = array(
    'name'=> $_POST['name'],
    'shortdesc'=>$_POST['shortdesc'],
    'longdesc' => $_POST['longdesc'],
    'status'=>$_POST['status'],
    'parentid' => $_POST['parentid']

    );
    $this->db->insert('categories', $data);
}

代码点火器将为您正确地逃逸这些值。也就是说,您应该使用input类来获取您的post数据;如果您在配置文件中设置了vs XSS,它不仅可以自动保护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'
);

代码点火器将为您正确地逃逸这些值。也就是说,您应该使用input类来获取您的post数据;如果您在配置文件中设置了vs XSS,它不仅可以自动保护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'
);

我建议这样做

$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()
将返回什么)

我建议这样处理

$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()

这些输入方法不会自动防止XSS,如果您在配置中启用它,它们会这样做,这就是为什么我写了“如果您这样设置”,例如,
$config['global\xss\u filtering']=TRUE哈,你可能想澄清一下,因为“如果你这样设置”可能意味着这篇文章失去控制的任何东西。要点是“是的,CI为您转义这些值”不,我只是想清楚,如果您想要全局xss筛选,您必须在配置文件中设置该选项。我不希望OP或使用此答案的任何其他人认为他们正在进行过滤,而默认情况下他们没有。这些输入方法不会自动防止xss,如果您在配置中启用它,他们会这样做,这就是为什么我写了“如果您这样设置”,例如,
$config['global\u xss\u filtering']=TRUE哈,你可能想澄清一下,因为“如果你这样设置”可能意味着这篇文章失去控制的任何东西。要点是“是的,CI为您转义这些值”不,我只是想清楚,如果您想要全局xss筛选,您必须在配置文件中设置该选项。我不希望OP或其他使用此答案的人认为他们正在进行过滤,而默认情况下他们没有。