¿Es seguro incluir el esquema de datos en su Política de seguridad de contenido?

16

Tengo una aplicación Cordova que transforma algunas imágenes a base64. Esto viola la CSP con este mensaje:

  

Se negó a cargar la imagen   'datos: imagen / svg + xml; conjunto de caracteres = US-ASCII,% 3C% 3Fxml% 20version% 3D% 221.0% 22% 20encod ... E% 3C% 2Fg% ...% 3C% 2Fsvg% 3E'   porque viola la siguiente directiva de Política de Seguridad de Contenido:   "default-src 'self'". Tenga en cuenta que 'img-src' no se estableció explícitamente, por lo que   'default-src' se utiliza como alternativa.

De acuerdo con esta respuesta , simplemente puedo agregar data: a mi meta Content-Security-Policy, pero me gustaría mucho saber si esto es seguro. data: no especifica el origen y, por lo tanto, me temo que no es seguro.

    
pregunta Martin Verner 26.07.2015 - 19:58
fuente

2 respuestas

8

Esta es una excelente pregunta, y le recomiendo que se tome el tiempo de pensar en esto desde una perspectiva de seguridad en lugar de implementar la solución desde el enlace que envió.

Sí, como temía, el uso de data: en una directiva CSP no es seguro, ya que esto permite que las vulnerabilidades de XSS se abran como datos: pueden manejar cualquier URI. Esto se explica en Documentación de CSP de Mozilla.

Puede reducir el área de superficie de un posible ataque XSS cambiando los datos: directiva a:

img-src 'self' data:image/svg+xml

Sin embargo, como una buena práctica, me esforzaré por abordar el problema de raíz sobre las imágenes que se proporcionan como base64 y ver si se puede hacer de otra manera para no requerir la modificación de la directiva CSP.

    
respondido por el Herringbone Cat 27.07.2015 - 01:19
fuente
13
  1. La nota sobre la lista blanca del protocolo de datos al que se hace referencia dice

      

    datos: permite que los datos: URI se utilicen como fuente de contenido. Esto es inseguro; un atacante también puede inyectar datos arbitrarios: URIs. Utilice esto con moderación y definitivamente no para scripts.

    Esto no es en una parte específica de los riesgos de uris de datos en imágenes , y no he visto ninguna evidencia sustancial de que los datos de uris de imágenes en imágenes puedan ejecutar código en un navegador moderno, no importa. XSS una página.

    En ciertos contextos, una imagen SVG puede ejecutar código Javascript, pero estos son contextos secundarios como <iframe> , <object> o <embed> elementos, o una parte directa del host DOM ie <svg> elements.

    MDN llama a explícitamente que <img> incrustó SVGs no puedo ejecutar Javascript, junto con algunas otras restricciones de seguridad, diciendo

      
    • JavaScript está deshabilitado.
    •   
    • Los recursos externos (por ejemplo, imágenes, hojas de estilo) no se pueden cargar, aunque se pueden usar si están en línea a través de los datos: URI.
    •   
    • Los estilos :visited-link no se representan.
    •   
    • El estilo del widget nativo de la plataforma (basado en el tema del sistema operativo) está deshabilitado.
    •   
  2. Parece que no es posible especificar un MIME como parte de la declaración de lista blanca de data: protocol como se sugiere como posible mitigación. La única directiva de política de seguridad de contenido que he visto capaz de restringir el tipo MIME es plugin-types , que restringe solo para <object> y <embed> (consulte documentos generales de CSP ).

Estaré de acuerdo con la respuesta aceptada con el respeto de que si no tiene que usar data-uris , y puede hacerlo con poco dolor, es más fácil mantener su CSP y no usarlo. Sin embargo, si está trabajando con imágenes, eso suele ser un gran dolor.

    
respondido por el zemnmez 10.08.2017 - 23:58
fuente

Lea otras preguntas en las etiquetas