2011-06-21 15 views
10

Mi objetivo es permitir a los socios que diseñen sus páginas de destino con su propio estilo al enviarnos un enlace a su hoja de estilo en un parámetro de URL. ¿Hay problemas de seguridad o compatibilidad del navegador al cargar CSS de terceros a través de JavaScript?¿Hay algún peligro al cargar CSS externo de terceros?

Respuesta

13

En archivos CSS.

expressions(code), behavior:url(), url(javascript:code), y -moz-binding:url() tienen posibles problemas de seguridad.

El comportamiento no puede ser de dominio cruzado, por lo que elimina algunas amenazas, pero en general, debe desinfectarlo de alguna manera.

Si permite que el usuario enlace a CSS en servidores externos, no hay una forma de validación a prueba completa. El servidor podría verificar el archivo CSS en el servidor para asegurarse de que no haya nada malicioso, pero ¿qué ocurre si el usuario cambia la hoja de estilo? Debería comprobar continuamente la hoja de estilo. Además, el servidor podría enviar información diferente a la dirección IP del servidor para intentar eludir el método de validación.

Sinceramente, le aconsejo que guarde el CSS en su propio servidor. Simple run it arroja un analizador de expresiones regulares que elimina el posible código malicioso desde arriba.

+1

+1 ¡Para ejemplos específicos! –

+1

+1, pero tenga en cuenta que ahora las expresiones no son compatibles, como lo es el comportamiento, y aunque usted * podría * cargar JS en una imagen de fondo o algo que no se va a ejecutar. –

+3

Las expresiones se ejecutan en IE8 para compatibilidad con versiones anteriores. Considerando que IE tiene el uso más grande, definitivamente los consideraría una amenaza a la seguridad. – William

3

Mientras lo valide de alguna manera, debe ser bueno.

REGLA DE ORO: no confían en el usuario

+2

Una propuesta sobre cómo validar sería beneficiosa. – William

+0

@Lime, todo depende de si el archivo css se guarda en el servidor, y cuál es la implementación del servidor, etc. – Neal

+0

No lo guardaremos en el servidor ... – jarbot

2

Si el usuario es la única persona con la capacidad de ver su CSS personalizado, a continuación, en realidad no hay ningún peligro. Podrían arruinar su propia experiencia en su sitio, pero no la de los demás.

Sin embargo, si su CSS personalizado se muestra a otros usuarios, entonces podrían potencialmente utilizarlo para desordenar completamente los estilos de su sitio como lo desea. Por ejemplo, pueden simplemente tomar el id de algunos elementos importantes de su fuente y anularlos para ocultarlos.

Por supuesto, siempre que tenga cuidado y desinfecte de forma adecuada todas las entradas de los usuarios, no debería enfrentar ningún problema importante.

0

Las expresiones CSS solo funcionan en IE 6-7, pero permiten el uso de JS en línea (generalmente para calcular un valor para establecer).

Por ejemplo: Sin embargo

/* set bgcolor based on time */ 
div.title { 
    background-color: expression((new Date()).getHours() % 2 ? "#B8D4FF" : "#F08A00"); 
} 

, esto podría ser utilizado para hacer cosas maliciosas, yo diría que es al menos un valor aproximado de la prueba.

+0

Funciona en IE8 dependiendo del tipo de documento – William

Cuestiones relacionadas