Según el sitio web de CSP , When you have a Content-Security-Policy header defined, the browser will automatically block inline scripts
.
Sin embargo, después de eliminar todas mis otras directivas, me quedé con Content-Security-Policy: script-src 'self' https: http:
, mi script en línea se ejecuta sin error, ¿por qué?
Lo que espero es que mi navegador bloquee cualquier javascript en línea para ejecutarse. Entonces ahí es donde entran en juego nonce, hashes y unsafe-inline.
Mi javascript en línea
<script> function test() { console.log("inline javascript is executed") } test(); </script>
Prueba del navegador CSP (versión de Chrome 100.0.4896.127 (compilación oficial) (x86_64))
Safari Test Result me da errores correctos, pero Chrome ejecutará scripts en línea sin errores
Puse este pequeño archivo PHP en mi xampp local para probarlo...
las dos primeras anotaciones bloquean la alerta y la última la permite. Probado en
Todos los navegadores crean un mensaje de error en la consola que indica que la ejecución en línea de un script se ha bloqueado debido a CSP.
<?php // no alert //header("Content-Security-Policy: script-src 'self' http: https:", true); // no alert header("Content-Security-Policy: script-src 'self'", true); // alert //header("Content-Security-Policy: script-src 'self' 'unsafe-inline'", true); ?><html> <head><title></title></head> <body> <script>alert('test');</script> </body> </html>
Ideas para solucionar problemas: