2011-06-20 11 views
6

Tengo un sitio escrito por Rails3. Mi modelo de publicación tiene una columna de texto que nombra "contenido". En el panel posterior, el formulario html configura la columna "content" en el campo textarea con tinymce. En la página principal, debido al uso de tinymce, el código post.html.erb debe implementarse con el método sin formato como <%= raw @post.content %>.Estoy usando Rails3 con tinymce. ¿Cómo presentar el navegador del usuario javascript, luego ingrese xss?

Bien, ahora si cierro el Javascript del navegador, este textarea puede escribir sin tinymce, y tal vez el usuario ingrese cualquier xss como <script>alert('xss');</script>. Mi frente mostrará ese cuadro de alerta.

Intento sanitize(@post.content) en posts_controller, pero el método sanitize filtrará el estilo de tinymce entre sí. Por ejemplo, <span style='color:red;'>foo</span> se convertirá en <span>foo</span>.

Mi pregunta es: ¿Cómo se filtra la entrada de xss y se reserva el estilo de tinymce al mismo tiempo?

Respuesta

2

El sanitizador se puede configurar para permitir el atributo de estilo. En su config/application.rb complemento:

config.action_view.sanitized_allowed_attributes = ['style'] 

El método de higienización también tiene valores por defecto para los que las propiedades CSS y palabras clave que permite. Consulte sanitizer.rballowed_css_properties y allowed_css_keywords para obtener una lista de los valores predeterminados.

para añadir algo que no están permitidos actualmente agregar esto a su config/application.rb:

config.action_view.sanitized_allowed_css_keywords = ['puke'] 

-

Si estás haciendo algo más complicado que esto, entonces usted tendrá que escribir un poco código. No recomiendo hacerlo desde cero, consulte el Loofah Gem para obtener una buena biblioteca para escribir depuradores html.

Cuestiones relacionadas