Inhaltssicherheitsrichtlinie (CSP): Eine umfassende Anleitung zur Websicherheit
Inhaltssicherheitsrichtlinie (CSP) ist ein entscheidender Sicherheitsmechanismus, der Websites gegen Inhaltsinjektionsangriffe, hauptsächlich Cross-Site-Skripten (XSS), schützt. Diese deklarative Richtlinie ermöglicht es Entwicklern, einen Whitelisten vertrauenswürdige Ressourcen -Ursprünge zu erstellen, um zu kontrollieren, wie der Browser Ressourcen lädt, Inline -Stile und -Skripte verwendet und die dynamische JavaScript -Bewertung übernimmt (z. B. mit eval()
). Jeder Versuch, Ressourcen von außen zu laden, ist blockiert.
Schlüsselkonzepte:
Content-Security-Policy
http implementiert. report-uri
-Richtlinienprotokolle CSP, von unschätzbarem Wert für Produktionsumgebungen. Dies sendet einen JSON -Bericht, in dem der Verstoß an eine bestimmte URL detailliert wird. Wie CSP funktioniert:
CSP, eine W3C -Kandidatenempfehlung, verwendet den Content-Security-Policy
-Header, um Anweisungen zu liefern. Zu den Schlüsselanweisungen gehören: default-src
, script-src
, object-src
, style-src
, img-src
, media-src
, frame-src
, font-src
und connect-src
. default-src
fungiert als Fallback für nicht spezifizierte Richtlinien.
Richtlinien folgen einem konsistenten Muster:
self
: Bezieht sich auf die aktuelle Domäne. none
: verbietet das Laden von Ressourcen für eine bestimmte Richtlinie (z. B. Plugins blockiert). object-src 'none'
<code>Content-Security-Policy: default-src 'self';</code>
) ermöglichen jedoch die Einbeziehung von Subdomänen (z. B. ` .mycdn.com`). Jede Richtlinie erfordert eine explizite Domäne/Subdomain -Auflistung. Sie erben nicht aus früheren Richtlinien.
für Daten -URLs enthalten data:
in die Direktive (z. B. img-src 'data:'
). unsafe-inline
(für script-src
und style-src
) erlaubt Inline <script></script>
und <style></style>
Tags, und unsafe-eval
(für script-src
) ermöglicht eine dynamische Code -Bewertung. Beide verwenden Opt-In-Richtlinien; Das Auslassen von ihnen erzwingt Einschränkungen.
Browserkompatibilität:
CSP 1.0 genießt einen breiten Browser -Support, wobei ältere Internet -Explorer -Versionen eine begrenzte Kompatibilität haben.
Überwachung Verstöße mit report-uri
:
Während die Entwicklung der Browser -Konsolenprotokollierung verwendet, profitieren Produktionsumgebungen von report-uri
. Dies sendet HTTP -Postanfragen mit Verstößendetails (im JSON -Format) an eine bestimmte URL.
Beispiel:
<code>Content-Security-Policy: default-src 'self';</code>
Ein Verstoß (z. B. das Laden von www.google-analytics.com
) erzeugt einen JSON -Bericht, der an die report-uri
Content-Security-Policy-Report-Only
Header:
Verwenden Sie zum Testen Content-Security-Policy-Report-Only
. Dies meldet Verstöße ohne Blockierung von Ressourcen und ermöglicht die Verfeinerung der Richtlinien ohne Störungen. Beide Header können gleichzeitig verwendet werden.
Implementieren von CSP:
CSP wird über den HTTP -Header eingestellt. Serverkonfiguration (Apache, IIS, Nginx) oder programmatische Methoden (PHPs header()
, node.js setHeader()
) können verwendet werden.
reale Beispiele:
Facebook und Twitter zeigen verschiedene CSP -Implementierungen, die Wildcards und spezifische Domänenzulagen nutzen.
CSP -Stufe 2 Verbesserungen:
CSP Level 2 führt neue Direktiven (base-uri
, child-src
, form-action
, frame-ancestors
, plugin-types
), verbesserte Berichterstattung und Nonce/Hash-basierte Schutz für Inline-Skripte und Stile ein.
nonce-basiertes Schutz:
Ein zufällig erzeugtes Nonce ist sowohl im CSP -Header als auch im Inline -Skript -Tag enthalten.
Hash-basierter Schutz:
Der Server berechnet den Hash des Skript-/Stilblocks, der im CSP -Header enthalten ist. Der Browser überprüft diesen Hash vor der Ausführung.
Schlussfolgerung:
report-uri
CSP erhöht die Websicherheit erheblich, indem die Ressourcen geladen wird.
(Hinweis: Die Bildplatzhalter bleiben wie angefordert unverändert.)
Das obige ist der detaillierte Inhalt vonVerbesserung der Websicherheit mit der Inhaltssicherheitsrichtlinie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!