html - specified - ignorando unsafe inline dentro de script src se ha especificado strict dynamic
¿Cuál es el propósito del atributo HTML "nonce" para los elementos de estilo y script? (1)
W3C dice que hay un nuevo atributo en HTML5.1 llamado
nonce
para
style
y
script
que puede ser usado por la Política de Seguridad de Contenido de un sitio web.
Busqué en Google, pero finalmente no entendí qué hace realmente este atributo y qué cambios al usarlo.
El atributo
nonce
permite "incluir en la lista blanca" ciertos elementos de
style
y
script
línea, mientras evita el uso de la directiva
unsafe-inline
CSP (que permitiría
todo el
style
/
script
línea), de modo que aún conserve la característica clave de CSP de no permitir el
script
línea /
style
en general.
Entonces, el atributo
nonce
es una forma de decirle a los navegadores que el contenido en línea de un script o elemento de estilo en particular no fue inyectado en el documento por un tercero (malicioso), sino que fue colocado intencionalmente en el documento por quien controla el servidor. servido desde.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it
da un buen ejemplo de cómo usar el atributo
nonce
, que se reduce a los siguientes pasos:
-
Por cada solicitud que su servidor web reciba para un documento en particular, haga que su servidor genere una cadena aleatoria codificada en base64 de al menos 128 bits de datos de un generador de números aleatorios criptográficamente seguro; por ejemplo,
EDNnf03nceIOfn39fn3e9h3sdfa
. Ese es tu nonce. -
Tome el nonce generado en el paso 1, y para cualquier
script
descript
/style
que desee "incluir en la lista blanca", haga que su código de fondo inserte un atributononce
en el documento antes de enviarlo por cable, con ese nonce como valor:<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
-
Tome el nonce generado en el paso 1,
nonce-
y haga que su backend genere un encabezado CSP con ese entre los valores de la lista de origen parascript-src
ostyle-src
:Content-Security-Policy: script-src ''nonce-EDNnf03nceIOfn39fn3e9h3sdfa''
Por lo tanto, el mecanismo de usar un nonce es una alternativa a que su backend genere un hash del contenido del
script
o
style
que desea permitir, y luego especifique ese hash en la lista de origen apropiada en su encabezado CSP.
Tenga en cuenta que debido a que los navegadores no (no pueden) verificar que el valor nonce enviado cambia entre las solicitudes de página, es posible, aunque totalmente desaconsejable, omitir 1 arriba y no hacer que su backend haga nada dinámicamente por el nonce, en cuyo caso usted podría poner un atributo
nonce
con un valor estático en la fuente HTML de su documento y enviar un encabezado CSP estático con ese mismo valor nonce.
Pero la razón por la que no querría usar un nonce estático de esa manera es que, en primer lugar, sería un fracaso para el propósito de usar el nonce, porque si usara un nonce estático como ese, en ese punto, bien podría estar usando
unsafe-inline
.