Información por adelantado:
Uso Netlify y, por lo tanto, también el archivo netlify.toml proporcionado por Netlify para borrar cosas como CSP o HSTS.
Además, estoy usando Cloudflare.
El problema:
El servicio de detección de JavaScript de Cloudflare inyecta código en mi sitio web. Sin embargo, dado que mi Política de seguridad de contenido no se ajusta en consecuencia, ocurre el siguiente error:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' ..."
El mensaje de error completo está en el sitio web .
El CSP actual:
He intentado ajustar mi CSP/script-src en consecuencia. Aquí está mi enfoque:
script-src 'self' ajax.cloudflare.com cdnjs.cloudflare.com static.cloudflareinsights.com;
El default-src se establece en ninguno.
Cualquier ayuda es apreciada. Todavía no he intentado configurar el CSP en el script HTML.
Por lo tanto, no son los archivos Javascript vinculados los que están fallando en el CSP, es el javascript en línea (directamente después del archivo js del cargador de cohetes). Al observar el mensaje de error que se genera, en realidad brinda información sobre lo que permitiría que pase el CSP:
Either the 'unsafe-inline' keyword, a hash ('sha256-DHoAlYi+jbDdRYheBA8zRtbuAh9tH4/dMM2Krte5NJM='), or a nonce ('nonce-...') is required to enable inline execution.
Parece que Cloudflare admite el uso del método "nonce" :
If your CSP uses a nonce for script tags, Cloudflare will add these nonces to the scripts it injects by parsing your CSP response header.
Más información aquí - https://content-security-policy.com/nonce/
El servicio de detección de JavaScript de Cloudflare es una característica muy mala. Desactívelo si puede, porque CSP está diseñado para bloquear dicha inyección de secuencias de comandos realizada por ISP. Dado que el script inyectado no envía una respuesta a Cloudflare, Cloudflare trata al navegador como un bot sin ejecución de JS.
Netlify es un alojamiento de archivos estáticos, por lo tanto, no tiene posibilidad de permitir scripts en línea con 'nonce-value' , solo se puede usar 'hash-value' . Pero no tiene control sobre el script en línea inyectado, por lo que cualquier cambio de código conduce a bloquearlo.
O simplemente ignore esta violación de CSP, no conduce a una interrupción del funcionamiento del sitio.
No hay una solución hermosa para su problema, solo puede plantear un problema en Cloudflare y pedirles que migren este script en línea al script externo y lo incluyan en la lista blanca.
Nota: este no es el único problema al enviar tráfico a través de Cloudflare, pero en cualquier momento puede dejar de usar Cloudflare como proxy y usarlo solo como servidor DNS. Simplemente presione el botón de derivación.