2009-08-12 1 views
6

¿Cuáles son las prácticas para evitar XSS en Ruby on Rails? Encontré muchos documentos antiguos en la web y la mayoría de las veces se trataba de usar h/html_escape helper para evitar cualquier variable que provenga de los usuarios.Ruby on Rails y prevención XSS

I comprenderá de nuevas docs que en la versión 2.0 y superior no es desinfecte método que es la limpieza automáticamente la entrada de supuestamente entrada malicioso. ¿Es suficiente o está haciendo algo más para asegurar sus aplicaciones ?

Respuesta

10

El Ruby on Rails Security Guide es bastante minucioso sobre los problemas específicos de Rails que debe tener en cuenta al diseñar la seguridad para su sitio web.

15

El método h sigue siendo el camino a seguir para escapar de todo el código HTML dentro de una cadena. Debe usar este método en cualquier lugar en el que genere contenido.

<%=h @recipe.description %> 

Este comportamiento va a cambiar en Rails 3. No todas las salidas se escaparon por defecto y que se necesitan para especificar explícitamente a no escapar de ella. Mientras tanto, si a menudo olvida utilizar este método h, puede consultar Safe ERB plugin.

El método sanitize es una buena manera de eliminar ciertas etiquetas del contenido de manera selectiva. Por ejemplo, si desea permitir que el usuario ponga en negrita y en cursiva su salida junto con agregar enlaces, puede hacerlo.

<%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %> 

Como se mencionó Oliver, echa un vistazo a la Security Guide para más información.

4

En cuanto a las mejores prácticas, recomendaría lo siguiente:

  1. Siempre use los carriles forman ayudantes (form_for, etc), si usted escribe su propia forma, se abre la puerta a ataques CSRF.

  2. Durante el uso de la función h() se escapará de texto como está escrito de una página, usted todavía terminar con XSS explota guardado en la base de datos. El uso del complemento XSS_terminate elimina la entrada a medida que se guarda.

  3. No olvide que su aplicación se ejecuta en una pila de otras aplicaciones (Rails, Apache, MySQL, su SO de elección), cada una de las cuales tiene sus propios problemas de seguridad.

2

Los rieles desinfecte método es bastante bueno, pero no garantiza la buena formación, y es bastante propensos a ser atacados debido a la base de instalación. Mejor práctica es usar html5lib (realmente el mejor, si no el más rápido o el más rubí) o Sanitize o Loofah