W3C dice que hay un nuevo atributo en HTML5.1 llamada noncepara styley scriptque puede ser utilizado por el contenido Política de Seguridad de un sitio web.
Busqué en Google, pero finalmente no entendí qué hace realmente este atributo y qué cambia al usarlo.

scriptystyle? Algo como la prohibición de hotlink?Respuestas:
El
nonceatributo le permite "incluir en la lista blanca" ciertos elementosscriptystyleelementos en línea , al tiempo que evita el uso de launsafe-inlinedirectiva CSP (que permitiría todo en líneascript/style), de modo que aún conserva la característica clave de CSP de no permitir en líneascript/styleen general.Entonces, el
nonceatributo 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 en el que se sirve el documento de.https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it da un buen ejemplo de cómo usar el
nonceatributo, que equivale 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 en línea
script/styleque desee "incluirnonceen la lista blanca", haga que su código backend inserte un atributo en el documento antes de enviarlo por cable, con ese nonce como valor:Tome el nonce generado en el paso 1, añádalo
nonce-y haga que su backend genere un encabezado CSP con ese entre los valores de la lista de origen parascript-srcostyle-src:Por lo tanto, el mecanismo de usar un nonce es una alternativa a que su backend genere un hash del contenido de la línea
scriptostyleque desea permitir, y luego especifique ese hash en la lista de fuentes apropiada en su encabezado CSP.Tenga en cuenta que debido a que los navegadores no pueden (no pueden) verificar que el valor nonce enviado cambie entre las solicitudes de página, es posible, aunque totalmente desaconsejable, omitir el 1 anterior y no hacer que su backend haga nada dinámicamente por el nonce, en cuyo caso usted podría simplemente poner un
nonceatributo 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 uso de nonce, porque, si fuera a usar un nonce estático como ese, en ese punto, bien podrías estar usando
unsafe-inline.fuente
nonceatributo, si no necesita usarlo absolutamente, entonces no lo haga. Realmente solo está destinado a casos en los que, por alguna razón, no puede (todavía) deshacerse de algún script en línea o contenido de estilo de un documento en particular (pero debería eliminarlo más adelante). Entonces, si por alguna razón no tiene la necesidad de mantener el contenido en línea de la secuencia de comandos y el estilo, mientras tanto, al menos puede usar el mecanismo nonce para permitir que los navegadores verifiquen que estén bien. De lo contrario, sólo debe hacer pleno uso de CSP como realmente se refiere, y no permitir que los elementos de script o de estilo en línea<script type="text/javascript" nonce>y<style type="text/css" nonce>