2009-11-12 4 views
12

en Ruby on Rails, para las condiciones, es fácil de hacer consultas SQL de inyección a prueba:escapar con seguridad cadenas de fragmentos SQL para las uniones, los límites, selecciona, y así sucesivamente (no las condiciones) en los carriles

:conditions => ["title = ?", title] 

donde el título proviene del exterior, de un formulario web o algo así.

Pero lo que si está utilizando fragmentos SQL en otras partes de la consulta, como:

:select => "\"#{title}\" AS title" # I do have something like this in one instance 
:joins => ["LEFT JOIN blah AS blah2 ON blah2.title = \"#{title}\""] 

¿Hay una manera de escapar adecuadamente esas cadenas?

Respuesta

22

Normalmente en Rails, las uniones se realizan como un símbolo (o como un hash para uniones de segundo orden) que representan una unión de identificación, y se usan las condiciones para filtrarla. Si necesita hacerlo como se muestra, puede usar el sanitize_sql_array de ActiveRecord para limpiar una cadena de SQL, como esta:

sanitize_sql_array(["LEFT JOIN blah AS blah2 ON blah2.title = ?", @blah.title]) 
Cuestiones relacionadas