2010-07-28 6 views
3

J'ai récemment ajouté une section de commentaires à un blog. Codeigniter dit toujours d'échapper des données avant de les mettre dans le Db. (J'ai xss propre à plein temps). Certaines personnes disent que toutes les opérations d'enregistrement actives sont échappées. Suis-je perdre mon temps en utilisant l'échappement sur la fonction ci-dessous?Utilisation de la fonction d'échappement Codeigniter

En utilisant la fonction ci-dessous j'échapper les données, mais tout cela sort dans la vue a échappé. Comment "déséchapper" les données afin qu'elles soient lisibles sans les ''? Je ne veux pas utiliser une regex pour supprimer chaque '' dans le cas où il est utilisé dans une phrase

Je suppose que ma vraie question est, les enregistrements actifs sont toujours échappés ou non?

-à-dire: Auteur sort 'Nom'

function comment_insert() 
{ 
$data = array 
(
    'entry_id' => $this->db->escape($this->input->post('entry_id')), 
    'ip' => $this->db->escape($this->input->post('ip')), 
    'date' => $this->input->post('date'), 
    'comment' => $this->db->escape($this->input->post('comment')), 
    'author' => $this->db->escape($this->input->post('author')), 
    'email' => $this->db->escape($this->input->post('email')) 
); 

$this->form_validation->set_rules('ip', 'IP', 'required|trim|valid_ip');//check 
$this->form_validation->set_rules('entry_id', 'Entry ID', 'required|trim|numeric'); 
$this->form_validation->set_rules('date', 'Date', 'required|trim'); 
$this->form_validation->set_rules('comment', 'Comment', 'required|trim|max_length[600]'); 
$this->form_validation->set_rules('author', 'Name', 'required|trim|alpha_dash'); 
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email'); 

if ($this->form_validation->run() == TRUE) 
{ 
    $this->db->limit(1); 
    $this->db->insert('comments', $data); 
    redirect('main/blog_view/'.$_POST['entry_id']); 
} else 
{ 
    redirect('main/blog_view/'.$_POST['entry_id']); 
} 
} 

Merci

Répondre

7

Selon le guide de l'utilisateur CodeIgniter pour les fonctions Active Record dans la classe de base de données: http://codeigniter.com/user_guide/database/active_record.html

Au-delà de la simplicité Un avantage majeur de l'utilisation des fonctionnalités Active Record est qu'il vous permet de créer des applications indépendantes de la base de données, car la syntaxe de la requête est générée par chaque adaptateur de base de données. Il permet également des requêtes plus sûres, car les valeurs sont automatiquement échappées par le système. (emphase ajoutée)

Alors oui, vous perdez votre temps. Tant que vous utilisez Active Record, vos données sont automatiquement échappées.

+0

Thnak vous. Une fois que vous commencez à lire et à voir des choses comme ça ($ this-db-> where()) "Note: Toutes les valeurs passées à cette fonction sont automatiquement échappées, produisant des requêtes plus sûres." il est facile d'oublier qu'il est échappé de toute façon. J'apprécie votre réponse – Brad

+0

Il convient de noter que pour les requêtes SQL complexes, il n'est pas toujours possible d'utiliser des méthodes d'enregistrements actifs, en particulier lorsque nous référons plus d'une table et que nous avons des sous-requêtes dans la requête. –

Questions connexes