it-swarm-es.com

Rails - protección contra inyección de código y XSS

Empecé a usar Ruby en Rails, y me preguntaba si había problemas de seguridad que tener en cuenta con Rails, en particular con respecto a la inyección de código y XSS.

Lo sé Rails intenta prevenir tales ataques desinfectando entradas pero supongo que esto no puede ser infalible.

21
Magnus

Rails 3 tiene algunas protecciones bastante buenas activadas por defecto que detectarán muchos problemas de seguridad comunes.

Específicamente, la codificación de salida ayudará a mitigar los ataques XSS, los tokens CSRF están habilitados de forma predeterminada en todos los formularios que deberían ayudar aquí, y siempre que lo use correctamente, ActiveRecord u otros ORM pueden ayudar a mitigar la inyección de SQL.

En el frente de validación de entrada, obviamente, hay algunas cosas a tener en cuenta. Rails no validará la entrada de forma predeterminada, por lo que si los datos ingresados ​​en su aplicación se transfieren a otras aplicaciones web, aún existe el riesgo de que ocurran ataques XSS.

Dicho esto, Rails admite validaciones en el modelo, y recomendaría hacer una validación de la lista blanca de entrada allí, si es posible.

En el frente de la inyección SQL, todavía es posible usar SQL sin procesar con ActiveRecord, y si lo hace, pueden ocurrir los problemas habituales con la inyección SQL, por lo que nuevamente es útil la validación de la lista blanca de todas las entradas.

Más allá de eso, hay varias cosas que aún debes observar. la instalación base Rails) no proporciona autorización/autenticación, por lo que debe provenir de un complemento o ser escrita por el desarrollador.

Una desventaja de las URL de estilo RESTful que normalmente produce una aplicación Rails) es que generalmente es fácil para un atacante intentar romper la autorización modificando la URL. Por ejemplo, una URL de http: // mysite/users/1 que muestra al primer usuario, podría modificarse fácilmente para tener un 2 o más. No es que sea menos seguro, pero facilita a los atacantes intentar eludir los controles de autorización.

Hay un par de buenas fuentes de información para Rails seguridad) que vale la pena leer para obtener más información.

La guía de seguridad OWASP Rails está aquí y también hay un libro Security on Rails de Programadores pragmáticos que, aunque se centra en Rails 2.3 todavía tiene mucha buena información para tener en cuenta (tenga en cuenta que Seguridad en Rails ahora está agotada).

11
Rory McCune

El OWASP XSS Cheat Sheet es un gran recurso para comprender todas las formas en que XSS puede suceder:

  • REGLA # 0 - Nunca inserte datos no confiables, excepto en ubicaciones permitidas
  • REGLA # 1 - Escape HTML antes de insertar datos no confiables en el contenido del elemento HTML
  • REGLA # 2: escape de atributos antes de insertar datos no confiables en atributos comunes HTML
  • REGLA # 3 - Escape de JavaScript antes de insertar datos no confiables en valores de datos de JavaScript HTML
  • REGLA # 4 - Escape CSS antes de insertar datos no confiables en valores de propiedades de estilo HTML
  • REGLA # 5 - Escape de URL antes de insertar datos no confiables en valores de parámetros de URL HTML
  • REGLA # 6 - Use un motor de Política HTML para validar o limpiar HTML dirigido por el usuario de una manera saliente
  • REGLA # 7 - Prevenir XSS basado en DOM

No todas las reglas anteriores son atendidas por Rails automáticamente y depende de la versión:

Rails 3.x = "Si una cadena simple se pasa a <% =%>, Rails siempre se escapa"
Rails 2.x = Necesita usar el método h() (o usar algo como Cross Site Sniper o Safe Erb )

La lista blanca sí rige el día: si espera una abreviatura postal de EE. UU. De dos letras, use validaciones para aceptar solo eso.

Guía de seguridad general: http://guides.rubyonrails.org/security.html

11
Tate Hansen