Inyección de SQL en find_by Active Record RoR 4

0

Estaba tratando de entender la posibilidad de SQLi en una aplicación Rails, que actualmente estoy auditando para un cliente, que usa Active Record 4.2.0.

Ahora, tengo una experiencia limitada con RoR, así que por favor tenga paciencia conmigo en esto. Mientras mira a través de una consulta de la forma:

@order = Order.find_by(external_order_id: params['id'], source_user_id: @user.id) if params['id'].present?

y repasando varios avisos de seguridad sobre la seguridad de RoR, (como Hoja de referencia de seguridad de RoR ) Entiendo que el método find_by de Active Record PODRÍA ser peligroso de usar.

Ahora, para comprender mejor este hecho, también intenté revisar los registros de la aplicación para ver cuál es la consulta SQL exacta que se forma cuando se ingresa el código de Registro Activo anterior. De mi análisis entiendo que params ['id'] es la entrada del usuario que forma parte de la consulta SQL subyacente directamente. Sin embargo, si intento inyectar una carga útil SQLi en este parámetro, las comillas simples se escapan como \'

Ahora, algunas lecturas adicionales revelaron que Active Record se escapa de la entrada del usuario ( Por favor, corríjame si me equivoco aquí )

Entonces, si lo anterior es el caso, significa que el uso de find_by, como en el caso anterior, es completamente seguro. ¿O no es así? Si no, ¿cuáles podrían ser los posibles desvíos para el escape implementado por Active Record? ¿O hay otra carga útil que podría ayudarme a probar que SQLi es posible con el método find_by como se usa anteriormente, como se menciona en la hoja de trucos vinculada anteriormente?

    
pregunta qre0ct 23.05.2016 - 13:20
fuente

1 respuesta

1

enlace responde a este problema bien.

No utilice cadenas sin formato en ActiveRecord, use hashes.

Vea enlace para obtener una revisión completa de los métodos en cuestión.

    
respondido por el floum 02.07.2016 - 15:55
fuente

Lea otras preguntas en las etiquetas