2010-06-16 15 views
13

Quiero permitir a los usuarios de una aplicación web que estoy construyendo que escriban su propio CSS para personalizar su página de perfil.Sanitizing CSS in Rails

Sin embargo, estoy consciente de esta apertura para muchos riesgos de seguridad, es decir, background: url ('javascript: alert ("¿Tienes las cookies!" +') Document.cookies

Por lo tanto Busco a. solución para desinfectar el CSS al mismo tiempo que permite la mayor funcionalidad de CSS posible para mis usuarios.

Así que mis preguntas si alguien sabe de una gema o un complemento para manejar esto? Ya busqué en Google mis sesos así que cualquier consejo sería muy apreciado!

+0

curiosidad, ¿cómo se almacena el CSS? en la base de datos o como un archivo para cada usuario? –

+0

Wow ... loco que puedas ejecutar javascript desde CSS así. Sin embargo, no tengo idea de cómo resolverlo, ¡lo siento! – zaius

+0

Shripad K: Voy a almacenar el CSS en la base de datos. zaius: ¡Sí! Echa un vistazo a esta página: http://guides.rubyonrails.org/security.html#css-injection – Erik

Respuesta

7

Rails tiene un sanitario incorporado css

Ver http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize_css y su matriz http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize

> ActionController::Base.helpers.sanitize_css('background:#fff') 
=> "background: #fff;" 
> ActionController::Base.helpers.sanitize_css('javascript:alert("garr");') 
=> "" 
+0

Ok, ¡gracias! Pero, según tengo entendido, este método solo se usa para desinfectar un atributo de estilo en un elemento HTML. No se puede usar para desinfectar una hoja de estilo completa ...? – Erik

+0

Debería ser exactamente lo mismo: una línea o una pila de líneas ... no importará. – mylescarrick

+1

No maneja toda la hoja de estilos. – Habax

1

También hay algo de código llamado css_file_sanitize: https://github.com/courtenay/css_file_sanitize

Comparándolo con los rieles sanitize comando me parece que tanto el uso de expresiones regulares que se deben eliminar partes no deseadas de la CSS .

Aquí está la fuente de css_file_sanitize: https://github.com/courtenay/css_file_sanitize/blob/master/lib/css_sanitize.rb

Aquí está la fuente de rieles sanitize: https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/vendor/html-scanner/html/sanitizer.rb