2011-08-22 6 views
5

Estoy trabajando en un sitio que los clientes usarán incrustándolo en un iframe en su sitio. Quiero darles la posibilidad de personalizar el diseño de los contenidos para que se adapten a los estilos de su sitio.¿Está seguro un archivo CSS externo, o podría dar lugar a la inyección de código?

La idea básica que tengo es permitirles darme la URL de un archivo CSS que debo incluir en la página que les sirvo para completar el iframe. Hasta donde sé, esto es seguro, pero no estoy particularmente familiarizado con CSS (especialmente las versiones más nuevas), así que quiero verificar esto.

¿Hay alguna manera en que alguien pueda construir un archivo CSS que les permita insertar código en mi sitio u obtener acceso a cosas como las cookies de mi dominio? ¿Es esto realmente seguro o necesito encontrar una solución diferente?

+1

Creo que sería mejor que permitiera a los usuarios pegar estilos personalizados en un área de texto y luego puede validar que en realidad es CSS y nada dañino antes de incluirlo en sus vistas. –

Respuesta

12

No, no es inseguro. expression y -moz-binding son formas conocidas de provocar la ejecución de guiones arbitrarios en ciertos navegadores a través de CSS. LiveJournal sufrió un ataque XSS muy público que se debió a JavaScript incrustado en CSS proporcionado por el usuario.

Con Mozilla decidiendo permitir la ejecución de JavaScript arbitrario a través de CSS, no hay otra solución viable que la que hemos emprendido.

De Caja's attack vector wiki:

hojas de estilo CSS hecho a mano puede ejecutar javascript unsanitized en el ámbito global en algunos navegadores.

Antecedentes

CSS incluye varios mecanismos para cambiar el marcado de los alrededores y la ejecución de las expresiones.

IE tiene una extensión que permite la ejecución de javascript arbitrario. La propiedad expression se describe en http://msdn2.microsoft.com/en-us/library/ms537634.aspx

Usando la potencia de las propiedades dinámicas, ahora es posible declarar valores de propiedad no solo como constantes, sino también como fórmulas. ... Para las secuencias de comandos, una propiedad dinámica puede ser cualquier declaración legal de JScript o Microsoft Visual Basic Scripting Edition (VBScript). http://msdn2.microsoft.com/en-us/library/ms533503.aspx

binding permite la unión a especificados externamente guiones http://developer.mozilla.org/en/docs/CSS:-moz-binding & http://developer.mozilla.org/en/docs/XBL:XBL_1.0_Reference:Elements#binding

-moz-binding permite la unión a través de la interfaz XML (también usando datos: URLs)

Supuestos

código no confiable puede generar elementos de estilo o atributos de estilo o agregar de otra manera arbitrar y CSS gobierna y crea elementos DOM que activan esas reglas.

Versiones

IE 5 y posteriores (pero no IE 8 o posterior en "modo estándar").

Mozilla/Firefox, versiones no se conoce.

+0

impresionantes, gracias por todo el fondo. Parece que voy a tener otro mecanismo para que brinden el estilo, uno en el que puedo desinfectar primero. Ahora a encontrar la manera de desinfectar el CSS ... – Herms

+0

El proyecto de Caja mantiene listas blancas [] (http://code.google.com/p/google-caja/wiki/CajaWhitelists) de las propiedades y valores que pueden CSS sé útil. También cuenta con un analizador de Java y desinfectante para construido en –

+0

Caja se ha trasladado a Github, las listas blancas se puede encontrar aquí:. Https://github.com/google/caja/tree/master/src/com/google/caja/ lang/css –

Cuestiones relacionadas