2011-05-06 39 views
0

我使用此代碼的管理員端只爲我的網站,是這個數據庫插入安全嗎?這是codeigniter有效記錄查詢安全嗎?

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

我會建議解決它這樣

$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()回報,如果他們沒有設置)

5

代碼點火器將正確地爲您逃脫這些值。這就是說,你應該使用輸入類來獲取你的發佈數據;它不僅可以自動保護VS XSS如果你設置它在你的配置文件的方式,如果有這些值的都沒有設置,你不會得到警告噴涌而出:

$name = $this->input->post('name'); 

$data = array(
    'name' => $name, 
    ... etc ... 
); 

你也可以把功能直接在數組中稱:

$data = array(
    'name' => $this->input->post('name'), 
    ... etc ... 
); 

或者,如果你想設置的默認值時,崗位價值是不存在的:

// php 5.3+ 
$data = array(
    'name' => $this->input->post('name') ?: 'default' 
); 

// older 
$data = array(
    'name' => $this->input->post('name') ? $this->input->post('name') : 'default' 
); 
+0

這些輸入法不自動防禦xss – jondavidjohn 2011-05-06 16:58:26

+0

他們這樣做,如果你在你的配置中啓用它,這就是爲什麼我寫了「如果你設置它」,例如。 '$ config ['global_xss_filtering'] = TRUE;' – Erik 2011-05-06 16:59:25

+0

呵呵,你可能想澄清一下,因爲「如果你這樣設置」可能意味着什麼 – jondavidjohn 2011-05-06 17:01:09