2011-05-06 3 views
0

J'utilise ce code pour le côté admin uniquement pour mon site ci, est-ce que cet insert de db est sûr?cette requête d'enregistrement actif codeigniter est-elle sûre?

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

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

Répondre

2

je recommande l'aborder de cette façon

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

De cette façon, si l'une de ces valeurs statiques que vous avez spécifié ne sont pas réglés, ils ne sont pas ajoutés à l'insertion de données false (ce $this->input->post() rendement si elles ne sont pas définis)

5

Code Igniter va correctement échapper à ces valeurs pour vous. Cela étant dit, vous devez utiliser la classe d'entrée pour obtenir vos données de publication; non seulement il peut protéger automatiquement contre XSS si vous avez défini cette façon dans votre fichier de configuration, si l'une de ces valeurs ne sont pas positionnés, vous n'obtiendrez des avertissements crachant:

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

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

Vous pouvez aussi mettre la fonction appelez directement dans votre tableau:

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

Ou si vous souhaitez définir des valeurs par défaut lorsque la valeur POST est pas là:

// 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

ces méthodes d'entrée ne font pas protéger automatiquement contre xss – jondavidjohn

+0

ils le font si vous l'activez dans votre config, c'est pourquoi j'ai écrit "si vous le définissez de cette façon", par exemple. '$ config ['global_xss_filtering'] = VRAI;' – Erik

+0

hah, vous pourriez vouloir clarifier parce que "si vous le définissez de cette façon" peut signifier à peu près n'importe quoi – jondavidjohn

Questions connexes