1

我正在使用以下代码允许我将数据添加到我的数据库中,但它似乎$this->db->escape();不起作用,因为我可以添加 html 标签,它们将在视图中运行:(

代码:

$this->form_validation->set_rules('aPartyLocation','A Party Location', 'required|trim|prep_for_form|max_length[35]|xss_clean');
        $this->form_validation->set_rules('aPartyPhone','A Party Phone', 'required|trim|numeric|max_length[35]|xss_clean');

        if($this->form_validation->run() === TRUE)
            {
                $userData = array(
                    'location' => $this->input->post('aPartyLocation', TRUE),
                    'phone' => $this->input->post('aPartyPhone', TRUE));

                $this->db->escape($userData);
                $this->party_model->addAParty($userData);

更新:

控制器:

$userData = array(
    'id' => $id,
    'location' => html_escape($this->input->post('aPartyLocation', TRUE)),
    'phone' => html_escape($this->input->post('aPartyPhone', TRUE))
    );  

模型:

function addAParty($userData = NULL)
{
    $this->db->insert('aParty',$userData);
    return TRUE;
}
4

1 回答 1

3

我建议你使用CodeIgniter 的 Active Record类。这会自动为您转义数据。

例如,插入语句如下所示:

$this->db->insert('yourTable',array(
                 'location' => $this->input->post('aPartyLocation',TRUE),
                 'phone' => $this->input->post('aPartyPhone')
           ));

第二个参数是一个数组,其中键对应于数据库中的列。


编辑

我相信 Active Record 只会清理 SQL 注入攻击的数据。将第二个参数传递给$this->input->post()TRUE 可以保护您免受 XSS 攻击。但是,这些都没有转义 HTML 标记。为此,您可以使用该htmlspecialchars功能。

 $this->db->insert('yourTable',array(
                     'location' => htmlspecialchars($this->input->post('aPartyLocation',TRUE)),
                     'phone' => htmlspecialchars($this->input->post('aPartyPhone'))
                ));

$location = $this->input->post('aPartyLocation',TRUE);
$phone = $this->input->post('aPartyPhone');

 $this->db->insert('yourTable',array(
                     'location' => htmlspecialchars($location),
                     'phone' => htmlspecialchars($phone)
                ));
于 2012-06-14T10:03:57.787 回答