Política de seguridad de contenido


La Política de seguridad de contenido ( CSP ) es un estándar de seguridad informática introducido para evitar la secuencia de comandos entre sitios (XSS), el secuestro de clics y otros ataques de inyección de código que resultan de la ejecución de contenido malicioso en el contexto de la página web de confianza . [1] Es una recomendación candidata del grupo de trabajo del W3C sobre seguridad de aplicaciones web, [2] ampliamente compatible con los navegadores web modernos . [3] CSP proporciona un método estándar para que los propietarios de sitios web declaren los orígenes aprobados del contenido que los navegadores deberían poder cargar en ese sitio web; los tipos cubiertos sonJavaScript , CSS , marcos HTML , trabajadores web , fuentes , imágenes, objetos incrustables como subprogramas Java , ActiveX , archivos de audio y video y otras características HTML5 .

El estándar, originalmente llamado Restricciones de contenido, fue propuesto por Robert Hansen en 2004, [4] implementado por primera vez en Firefox 4 y rápidamente recogido por otros navegadores. La versión 1 del estándar se publicó en 2012 como recomendación del candidato del W3C [5] y rápidamente se publicaron nuevas versiones (Nivel 2) en 2014. A partir de 2015Se está desarrollando un borrador del Nivel 3 con las nuevas características que los navegadores web están adoptando rápidamente. [6]

Los siguientes nombres de encabezados se utilizan como parte de implementaciones experimentales de CSP: [3]

  • Content-Security-Policy- nombre de encabezado estándar propuesto por el documento W3C. Google Chrome admite esto a partir de la versión 25. [7] Firefox lo admite a partir de la versión 23, [8] lanzado el 6 de agosto de 2013. [9] WebKit admite esto a partir de la versión 528 (compilación nocturna). [10] El soporte de Microsoft Edge basado en Chromium es similar al de Chrome. [11]
  • X-WebKit-CSP- Encabezado experimental obsoleto introducido en Google Chrome y otros navegadores basados ​​en WebKit ( Safari ) en 2011. [12]
  • X-Content-Security-Policy- Encabezado experimental obsoleto introducido en los navegadores basados en Gecko 2 (Firefox 4 a Firefox 22, Thunderbird 3.3, SeaMonkey 2.1). [13]

Un sitio web puede declarar varios encabezados de CSP, mezclando también los de cumplimiento y los de solo informe. El navegador procesará cada encabezado por separado.

CSP también se puede entregar dentro del código HTML utilizando una etiqueta HTML META , aunque en este caso su efectividad será limitada. [14]

Internet Explorer 10 e Internet Explorer 11 también admiten CSP, pero solo la directiva de espacio aislado, utilizando el X-Content-Security-Policyencabezado experimental . [15]

Varios marcos de aplicaciones web admiten CSP, por ejemplo AngularJS [16] (de forma nativa) y Django (middleware). [17] Las instrucciones para Ruby on Rails han sido publicadas por GitHub . [18] Sin embargo, el soporte del marco web solo es necesario si el contenido del CSP depende de alguna manera del estado de la aplicación web, como el uso del nonceorigen. De lo contrario, el CSP es bastante estático y se puede entregar desde niveles de aplicación web por encima de la aplicación, por ejemplo, en el equilibrador de carga o el servidor web .

A partir de 2015El W3C está proponiendo una serie de nuevos estándares de seguridad para navegadores, la mayoría de ellos complementarios a CSP: [19]

  • Integridad de subrecursos (SRI) , para garantizar que solo los archivos de recursos conocidos y confiables (generalmente JavaScript , CSS ) se carguen desde servidores de terceros (generalmente CDN )
  • Contenido mixto , para aclarar la política del navegador previsto en las páginas cargadas a través de HTTPS y vincular contenido a través de HTTP de texto sin formato.
  • Actualice las solicitudes inseguras , sugiriendo a los navegadores cómo manejar los enlaces heredados en las páginas migradas a HTTPS
  • Gestión de credenciales , una API de JavaScript unificada para acceder a las credenciales del usuario para facilitar esquemas de inicio de sesión complejos,
  • Política de referencia , extensión de CSP para indicar al navegador la generación de los encabezados de referencia . [19]

Bypasses

En diciembre de 2015 [20] y diciembre de 2016, [21]'nonce' se publicaron algunos métodos para eludir los orígenes de las listas blancas. En enero de 2016, [22] se publicó otro método, que aprovecha las listas blancas de CSP en todo el servidor para explotar versiones antiguas y vulnerables de bibliotecas de JavaScript alojadas en el mismo servidor (caso frecuente con servidores CDN). En mayo de 2017 [23] se publicó un método más para eludir la CSP utilizando el código de marcos de aplicaciones web.

Mapeo entre las funciones de HTML5 y JavaScript y los controles de la Política de seguridad del contenido

Si el Content-Security-Policyencabezado está presente en la respuesta del servidor, un cliente compatible aplica la política declarativa de lista blanca. Un ejemplo de objetivo de una política es un modo de ejecución más estricto para JavaScript con el fin de prevenir ciertos ataques de secuencias de comandos entre sitios. En la práctica, esto significa que una serie de funciones están deshabilitadas de forma predeterminada:

  • Inline JavaScript código [a]