2010-02-13 14 views
5

¿Cuál es un buen método en Ruby para evitar la inyección SQL?Prevención del método SQL Injection/Good Ruby

+0

¿Con qué biblioteca? – sepp2k

+0

Oh cualquiera, tomaré cualquiera que recomiende. – Zombies

+0

Estoy un poco sorprendido por la baja, pero puede haber ayudado si mencionó si estaba usando un framework web o si usaba objetos simples de rubí. –

Respuesta

7

en recto hacia arriba ¿rubí? utilizar declaraciones preparadas:

require 'mysql' 
db = Mysql.new('localhost', 'user', 'password', 'database') 
statement = db.prepare "SELECT * FROM table WHERE field = ?" 
statement.execute 'value' 
statement.fetch 
statement.close 
+0

Mi problema con esto es que devuelve una matriz de resultados en lugar de un campo o algo mucho más manejable ... – Zombies

+0

Esto es solo un ejemplo de cómo usar declaraciones preparadas para una consulta de selección. Lo que hagas con los resultados depende de ti. –

3

No solo en Ruby: enlace sus parámetros (ya sea en la base de datos o en su código de cliente).

3

Mira la guía que tienen arriba en esto: http://guides.rubyonrails.org/security.html#injection

Básicamente, si desea utilizar las variables se unen en sus modelos para encontrar los datos, en lugar de parámetros en línea ..

Model.find(:first, :conditions => ["login = ? AND password = ?", entered_user_name, entered_password]) 
+0

Sí, esto se ve bien. Prácticamente a lo que estoy acostumbrado en Java, gracias. – Zombies

+3

Al menos debe mencionar que está hablando de registro activo. – sepp2k

+0

Estaba a punto de comentar sobre esto ... en mi prisa, olvidé leer que no era específicamente para Rails/ActiveRecord ... ¡lo siento! –

-1

Según http://ruby.railstutorial.org/ se puede prevenir Cross Site Request falsificación mediante la inserción de la etiqueta

<%= csrf_meta_tags %> 

en la cabecera de la app/views/layouts/application.html.erb.

Direct link of example

+4

¡Buena idea para quienes trabajan con frameworks web, pero SQL Inejection! = XSS – Zombies

0

este Tema referencias:

http://www.ruby-forum.com/topic/90258#new

http://www.ruby-forum.com/topic/82349#143790

método

hallazgo de ActiveRecord() se ha construido en la manera de evitar la inyección de SQL por utilizando el formato

¿Hay algún sistema de este tipo para escapar de la inyección en orden? Parece que solo toma una cadena y la alimenta a la instrucción SQL. Esto provoca una vulnerabilidad cuando se utiliza para establecer params: orden que en esta función:

 def list 
sort_by = params[:sort_by] 
@book_pages, @books = paginate :books, 
           :order => sort_by, 
           :per_page => 10 
    end 

Hemos intentado algunos métodos para desinfectar sort_by como el orden => [ '?', sort_by] pero simplemente lo pasa a la declaración SQL como una matriz aplanada . La 'magia que escapa' no funciona por orden. ¿Debo usar gsub! para desinfectar params [: sort_by]?