within specified scripts script mdn ignoring ignorando especificado dentro content allow html html5 attributes content-security-policy nonce

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:

  1. 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.

  2. Tome el nonce generado en el paso 1, y para cualquier script de script / style que desee "incluir en la lista blanca", haga que su código de fondo inserte un atributo nonce en el documento antes de enviarlo por cable, con ese nonce como valor:

    <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>

  3. 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 para script-src o style-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 .