Content-Security-Policy: style-src-Direktive
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.
Die HTTP-Content-Security-Policy
(CSP) style-src
-Direktive gibt gültige Quellen für Stylesheets an.
CSP-Version | 1 |
---|---|
Direktivtyp | Fetch-Direktive |
default-src Fallback |
Ja. Wenn diese Direktive fehlt, sucht der Benutzeragent nach der
default-src -Direktive.
|
Syntax
Content-Security-Policy: style-src 'none';
Content-Security-Policy: style-src ;
Diese Direktive kann einen der folgenden Werte haben:
'none'
-
Es dürfen keine Ressourcen dieses Typs geladen werden. Die einfachen Anführungszeichen sind obligatorisch.
-
Eine durch Leerzeichen getrennte Liste von source expression-Werten. Ressourcen dieses Typs dürfen geladen werden, wenn sie mit einem der angegebenen Quellausdrücke übereinstimmen. Für diese Direktive sind die folgenden Quellausdruckswerte anwendbar:
Beachten Sie, dass die Spezifikation auch
'unsafe-eval'
als gültigen Quellenausdruckswert enthält, um die CSSOM-Methoden zu erlauben, die CSS-Strings parsen und einfügen, einschließlich derinsertRule()
-Methoden undcssText
-Setter auf verschiedenen Schnittstellen, wieCSSStyleSheet.insertRule()
undCSSStyleDeclaration.cssText
. Derzeit blockiert jedoch kein Browser diese Methoden, sodass es nicht notwendig ist,unsafe-eval
anzuwenden.
Beispiele
Verletzungsfälle
Gegeben ist dieser CSP-Header:
Content-Security-Policy: style-src https://example.com/
die folgenden Stylesheets werden blockiert und nicht geladen:
ebenso wie Styles, die über den Link
-Header geladen werden:
Link: ;rel=stylesheet
Inline-Style-Attribute werden ebenfalls blockiert:
Genauso wie Styles, die in JavaScript durch direktes Setzen des style
-Attributes angewendet werden, oder durch Setzen von cssText
:
document.querySelector("div").setAttribute("style", "display:none;");
document.querySelector("div").style.cssText = "display:none;";
Stil-Eigenschaften, die direkt auf der style
-Eigenschaft des Elements gesetzt werden, werden jedoch nicht blockiert und ermöglichen es Benutzern, Styles sicher über JavaScript zu manipulieren:
document.querySelector("div").style.display = "none";
Diese Arten von Manipulationen können verhindert werden, indem JavaScript über die script-src
CSP-Direktive disallowiert wird.
Unsichere Inline-Styles
Hinweis: Das Verbot von Inline-Styles und Inline-Skripten ist einer der größten Sicherheitsgewinne, die CSP bietet. Wenn Sie es jedoch absolut verwenden müssen, gibt es einige Mechanismen, die dies erlauben.
Um Inline-Styles zu erlauben, können 'unsafe-inline'
, eine nonce-Quelle oder eine Hash-Quelle angegeben werden, die zu dem Inline-Block passt. Die folgende Content-Security-Policy erlaubt Inline-Styles wie das -Element und das
style
-Attribut auf jedem Element:
Content-Security-Policy: style-src 'unsafe-inline';
Das folgende -Element und
style
-Attribut wird durch die Richtlinie erlaubt:
Sie können eine Nonce-Quelle verwenden, um nur bestimmte Inline-Style-Blöcke zuzulassen. Sie müssen einen zufälligen Nonce-Wert generieren (unter Verwendung eines kryptografisch sicheren Zufalls-Token-Generators) und ihn in die Richtlinie aufnehmen. Es ist wichtig zu beachten, dass dieser Nonce-Wert dynamisch generiert werden muss, da er für jede HTTP-Anfrage eindeutig sein muss:
Content-Security-Policy: style-src 'nonce-2726c7f26c'
Sie müssen denselben Nonce auf dem -Element setzen:
Alternativ können Sie Hashes Ihrer Inline-Styles erstellen. CSP unterstützt sha256, sha384 und sha512. Die binäre Form des Hashs muss mit Base64 kodiert werden. Sie können den Hash eines Strings in der Befehlszeile über das openssl
-Programm erhalten:
echo -n "#inline-style { background: red; }" | openssl dgst -sha256 -binary | openssl enc -base64
Sie können eine Hash-Quelle verwenden, um nur bestimmte Inline-Style-Blöcke zuzulassen:
Content-Security-Policy: style-src 'sha256-ozBpjL6dxO8fsS4u6fwG1dFDACYvpNxYeBA6tzR+FY8='
Beim Generieren des Hashs sollten die -Tags nicht enthalten sein und beachten Sie, dass Groß- und Kleinschreibung sowie Leerzeichen, einschließlich führender oder nachfolgender Leerzeichen, von Bedeutung sind.
Spezifikationen
Specification |
---|
Content Security Policy Level 3 # directive-style-src |