Mit dem nonce
Attribut können Sie bestimmte Inlines script
und style
Elemente auf die Whitelist setzen und gleichzeitig die Verwendung der CSP- unsafe-inline
Direktive vermeiden (die alle Inlines script
/ zulässt style
), sodass Sie die wichtige CSP-Funktion beibehalten, Inline script
/ nicht zuzulassenstyle
im Allgemeinen .
Das nonce
Attribut dient also dazu, Browsern mitzuteilen, dass der Inline-Inhalt eines bestimmten Skripts oder Stilelements nicht von einem (böswilligen) Dritten in das Dokument eingefügt wurde, sondern absichtlich von demjenigen in das Dokument eingefügt wurde, der den Server steuert, auf dem das Dokument bereitgestellt wird von.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it bietet ein gutes Beispiel für die Verwendung des nonce
Attributs, das die folgenden Schritte umfasst:
Lassen Sie Ihr Backend für jede Anforderung, die Ihr Webserver für ein bestimmtes Dokument empfängt, eine zufällige Base64-codierte Zeichenfolge mit mindestens 128 Datenbits von einem kryptografisch sicheren Zufallszahlengenerator generieren. zB , EDNnf03nceIOfn39fn3e9h3sdfa
. Das ist deine Nonce.
Nehmen Sie die in Schritt 1 generierte Nonce und lassen Sie Ihren Backend-Code für jede Inline script
/ style
Whitelist ein nonce
Attribut in das Dokument einfügen, bevor er über die Leitung gesendet wird, mit dieser Nonce als Wert:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
Nehmen Sie die in Schritt 1 generierte Nonce nonce-
, stellen Sie sie voran und lassen Sie Ihr Backend einen CSP-Header mit dem Wert unter den Werten der Quellliste für script-src
oder generieren style-src
:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Der Mechanismus der Verwendung eines Nonce ist also eine Alternative dazu, dass Ihr Backend stattdessen einen Hash des Inhalts der Inline generiert script
oder style
zulässt und diesen Hash dann in der entsprechenden Quellliste in Ihrem CSP-Header angibt.
Da Browser nicht überprüfen können (können), ob sich der gesendete Nonce-Wert zwischen Seitenanforderungen ändert, ist es möglich - obwohl dies nicht ratsam ist -, 1 oben zu überspringen und Ihr Backend nichts dynamisch für das Nonce tun zu lassen. In diesem Fall können Sie Sie können einfach ein nonce
Attribut mit einem statischen Wert in die HTML-Quelle Ihres Dokuments einfügen und einen statischen CSP-Header mit demselben Nonce-Wert senden.
Der Grund, warum Sie eine statische Nonce nicht auf diese Weise verwenden möchten, ist, dass sie den gesamten Zweck der Verwendung der Nonce von Anfang an so gut wie zunichte macht - denn wenn Sie eine solche statische Nonce verwenden würden, An diesem Punkt könnten Sie genauso gut nur verwenden unsafe-inline
.