W3C sagt , es ist ein neues Attribut in HTML5.1 genannt nonce
für style
und script
dass durch den Inhalt Sicherheitspolitik einer Website verwendet werden.
Ich habe darüber gegoogelt, aber schließlich nicht verstanden, was dieses Attribut tatsächlich bewirkt und was sich bei der Verwendung ändert.
html
attributes
content-security-policy
nonce
an einer
quelle
quelle
script
und ladenstyle
? So etwas wie ein Hotlink-Verbot?Antworten:
Mit dem
nonce
Attribut können Sie bestimmte Inlinesscript
undstyle
Elemente auf die Whitelist setzen und gleichzeitig die Verwendung der CSP-unsafe-inline
Direktive vermeiden (die alle Inlinesscript
/ zuläsststyle
), sodass Sie die wichtige CSP-Funktion beibehalten, Inlinescript
/ 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 einnonce
Attribut in das Dokument einfügen, bevor er über die Leitung gesendet wird, mit dieser Nonce als Wert: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ürscript-src
oder generierenstyle-src
:Der Mechanismus der Verwendung eines Nonce ist also eine Alternative dazu, dass Ihr Backend stattdessen einen Hash des Inhalts der Inline generiert
script
oderstyle
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
.quelle
nonce
Wenn Sie das Attribut nicht unbedingt verwenden müssen, tun Sie es nicht. Es ist wirklich nur für Fälle gedacht, in denen Sie aus irgendeinem Grund (noch) keine Inline-Skript- oder Stilinhalte aus einem bestimmten Dokument entfernen können (aber später entfernen sollten). Wenn Sie also aus irgendeinem Grund nicht mehr in der Lage sind, Inline-Skript- und Stilinhalte beizubehalten, können Sie in der Zwischenzeit zumindest den Nonce-Mechanismus verwenden, damit Browser überprüfen, ob sie in Ordnung sind. Andernfalls sollten Sie CSP nur vollständig wie beabsichtigt verwenden und keine Inline-Skripte oder Stilelemente zulassen<script type="text/javascript" nonce>
und<style type="text/css" nonce>