Cómo agregar listas blancas específicamente a las bibliotecas JS que necesitan unsafe-eval

2

¿Es posible especificar los valores de la lista de origen en función del script src? El RFC lo menciona , pero no estoy seguro de su uso.

Por ejemplo:

Content-Security-Policy:default-src *; script-src 'unsafe-inline' 'self';
Content-Security-Policy:script-src 'unsafe-inline' 'unsafe-eval' https://maps.googleapis.com/*';

Esta combinación significa no permitir unsafe-eval en todas partes, excepto las API de Google Map (que lo necesitan).

Si no, entonces realmente significa que las aplicaciones deben eliminar unsafe-eval para todo solo porque un servicio como Google Maps lo necesita. No estoy seguro de si se pueden usar nonces para este tipo de situaciones.

    
pregunta Akshay Rawat 08.05.2015 - 11:56
fuente

1 respuesta

5

Lamentablemente no es así como funciona.

En tu ejemplo,

Content-Security-Policy:default-src *; script-src 'unsafe-inline' 'self';
Content-Security-Policy:script-src 'unsafe-inline' 'unsafe-eval' https://maps.googleapis.com/*';

'unsafe-eval' https://maps.googleapis.com/*' son ambas fuentes. No indica que se permita unsafe-eval en maps.googleapis.com , sino que indica que unsafe-eval está permitido en todas partes.

Sin embargo, como su primer encabezado solo indica script-src 'unsafe-inline' 'self' , esto eliminará efectivamente el 'unsafe-eval' https://maps.googleapis.com/*' de su segunda directiva. Esto es lo mismo que solo especificando unsafe-inline . Cada fuente debe pasar por ambas políticas "ilesas".

Tenga en cuenta que no puede especificar un comodín de la forma que tiene. Consulte aquí para obtener una explicación clara. Necesitas https://maps.googleapis.com en su lugar.

Los nonces no se pueden usar para resolver esto porque no hay un script en línea static : eval significa que todo está determinado en tiempo de ejecución por el navegador.

Le sugeriría que solo genere la parte 'unsafe-eval' https://maps.googleapis.com de la directiva CSP en las páginas que requieren mapas de Google, como parte de la salida de un único encabezado a la página.

    
respondido por el SilverlightFox 08.05.2015 - 12:52
fuente

Lea otras preguntas en las etiquetas