CSP: style-src
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
-Richtlinie style-src
legt gültige Quellen für Stylesheets fest.
CSP-Version | 1 |
---|---|
Richtlinientyp | Fetch-Richtlinie |
default-src Fallback |
Ja. Wenn diese Richtlinie nicht vorhanden ist, sucht der User-Agent nach der
default-src -Richtlinie.
|
Syntax
Content-Security-Policy: style-src 'none';
Content-Security-Policy: style-src <source-expression-list>;
Diese Richtlinie kann einen der folgenden Werte haben:
'none'
-
Es dürfen keine Ressourcen dieses Typs geladen werden. Die einfachen Anführungszeichen sind verpflichtend.
<source-expression-list>
-
Eine durch Leerzeichen getrennte Liste von Source-Expression-Werten. Ressourcen dieses Typs dürfen geladen werden, wenn sie mit einem der angegebenen Source Expressions übereinstimmen. Für diese Richtlinie sind folgende Source Expression-Werte anwendbar:
<host-source>
<scheme-source>
'self'
'unsafe-inline'
'unsafe-hashes'
'nonce-<nonce_value>'
'<hash_algorithm>-<hash_value>'
'report-sample'
Beachten Sie, dass die Spezifikation auch
'unsafe-eval'
als gültigen Source Expression-Wert enthält, um die CSSOM-Methoden zuzulassen, die CSS-Strings parsen und einfügen, einschließlich derinsertRule()
-Methoden und dercssText
-Setter auf verschiedenen Schnittstellen, wieCSSStyleSheet.insertRule()
undCSSStyleDeclaration.cssText
. Derzeit blockiert jedoch kein Browser diese Methoden, daher besteht keine Notwendigkeit,unsafe-eval
anzuwenden.
Beispiele
Verletzungsfälle
Angenommen, dieser CSP-Header ist gegeben:
Content-Security-Policy: style-src https://example.com/
die folgenden Stylesheets werden blockiert und nicht geladen:
<link href="https://not-example.com/styles/main.css" rel="stylesheet" />
<style>
#inline-style {
background: red;
}
</style>
<style>
@import url("https://not-example.com/styles/print.css") print;
</style>
sowie Styles, die unter Verwendung des Link
-Headers geladen werden:
Link: <https://not-example.com/styles/stylesheet.css>;rel=stylesheet
Inline-Style-Attribute werden ebenfalls blockiert:
<div style="display:none">Foo</div>
sowie Styles, die in JavaScript durch direktes Setzen des style
-Attributs oder durch Setzen von cssText
angewendet werden:
document.querySelector("div").setAttribute("style", "display:none;");
document.querySelector("div").style.cssText = "display:none;";
Jedoch werden Style-Eigenschaften, die direkt auf der style
-Eigenschaft des Elements gesetzt werden, nicht blockiert, was es Benutzern ermöglicht, 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-Richtlinie untersagt wird.
Unsichere Inline-Styles
Hinweis: Das Verbot von Inline-Styles und Inline-Skripten ist einer der größten Sicherheitsvorteile, die CSP bietet. Wenn Sie sie jedoch unbedingt verwenden müssen, gibt es einige Mechanismen, die dies ermöglichen.
Um Inline-Styles zu erlauben, kann 'unsafe-inline'
, eine nonce
-Quelle oder eine hash
-Quelle, die mit dem Inline-Block übereinstimmt, spezifiziert werden.
Die folgende Content Security Policy erlaubt Inline-Styles wie das <style>
-Element und das style
-Attribut an jedem Element:
Content-Security-Policy: style-src 'unsafe-inline';
Das folgende <style>
-Element und style
-Attribut werden von der Richtlinie erlaubt:
<style>
#inline-style {
background: red;
}
</style>
<div style="display:none">Foo</div>
Sie können eine nonce
-Quelle verwenden, um nur bestimmte Inline-Style-Blöcke zu erlauben.
Sie müssen einen zufälligen nonce
-Wert generieren (unter Verwendung eines kryptografisch sicheren Zufallstoken-Generators) und ihn in die Richtlinie einfügen.
Es ist wichtig zu beachten, dass dieser nonce
-Wert dynamisch generiert werden muss, da er für jede HTTP-Anfrage einzigartig sein muss:
Content-Security-Policy: style-src 'nonce-2726c7f26c'
Sie müssen das gleiche nonce
auf dem <style>
-Element setzen:
<style nonce="2726c7f26c">
#inline-style {
background: red;
}
</style>
Alternativ können Sie Hashes aus Ihren Inline-Styles erstellen. CSP unterstützt sha256
, sha384
und sha512
. Die binäre Form des Hashes muss mit base64
codiert werden. Sie können den Hash eines Strings über die Befehlszeile mittels des openssl
-Programms 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 zu erlauben:
Content-Security-Policy: style-src 'sha256-ozBpjL6dxO8fsS4u6fwG1dFDACYvpNxYeBA6tzR+FY8='
Beim Erstellen des Hashes schließen Sie die <style>
-Tags nicht ein und beachten Sie, dass Groß-/Kleinschreibung und Leerzeichen von Bedeutung sind, einschließlich führender oder nachfolgender Leerzeichen.
<style>
#inline-style {
background: red;
}
</style>
Spezifikationen
Specification |
---|
Content Security Policy Level 3 # directive-style-src |