2010-06-02 3 views
29

Dans Rails, quand je veux trouver par une valeur donnée d'utilisateur et d'éviter l'injection SQL (échapper Apostrophes et similaires) que je peux faire quelque chose comme ceci:Rails injection SQL?

Post.all(:conditions => ['title = ?', params[:title]]) 

Je sais que d'une façon non sécuritaire de le faire (possible injection SQL) est la suivante:

Post.all(:conditions => "title = #{params[:title]}") 

Ma question est, ne la méthode suivante empêche l'injection SQL ou non?

Post.all(:conditions => {:title => params[:title]}) 

Répondre

37

Oui, c'est le cas. Seul le second est dangereux.

+0

Nous vous remercions de votre réponse directe. –

5

+1 @fphilipe et @yuval Cochez cette case vidéo 5 min de railscast et celui-ci de rails guide

+0

Merci, j'ai déjà vu ça mais ça ne couvre pas ma question (concernant la dernière trouvaille) –