Defaults.Exposed

Defaults.ExposedBehebungen › Content-Security-Policy (CSP)

So beheben Sie Content-Security-Policy (CSP)

Eine Content Security Policy ist eine Sicherheitsregel, die Ihre Website dem Browser jedes Besuchers übergibt und ihm genau sagt, welcher Code ausgeführt werden darf. Ohne sie wird der Browser, falls je etwas Bösartiges auf eine Seite gelangt — über ein Kommentarfeld, ein gehacktes Plugin oder ein Drittanbieter-Skript —, es frei ausführen, einschließlich Code, der still und leise die Kartennummern und Passwörter Ihrer Kunden abgreift, während sie sie tippen, mit weiterhin angezeigtem Schloss-Symbol.

Das Wichtigste für Ihr Unternehmen: Wenn Ihre Seite je manipuliert wird, kann bösartiger Code die Zahlungskarten- und Login-Daten Ihrer Kunden direkt von Ihrer eigenen Kasse lesen, während alles völlig normal aussieht — und Ihnen Rückbuchungen, Betrugsansprüche, eine meldepflichtige Datenschutzverletzung und einen Prüfungs-Durchfaller bescheren, den die Sicherheitsteams größerer Kunden nutzen, um ein Geschäft zu blockieren oder zu beenden.

Was Sie das kosten kann

Warum es wichtig ist. Das Schloss-Symbol beweist, dass die Verbindung zu Ihrer Seite privat ist, aber es tut nichts, um zu steuern, welcher Code läuft, sobald ein Besucher auf der Seite ist. Eine Content Security Policy ist die Sicherung, die das tut — sie sagt Browsern, jedes Skript zu ignorieren, das nicht von einer Quelle kam, der Sie vertrauen, sodass ein einzelnes manipuliertes Feld, eine Anzeige oder ein Plugin nicht zu einem Werkzeug umfunktioniert werden kann, um das Geld und die Daten Ihrer Kunden zu stehlen. Es ist eine bewertete Prüfung auf Ihrer Bewertungskarte, echte Punkte wert, und eines der ersten Dinge, nach denen eine professionelle Sicherheitsprüfung sucht.

Was das ist, in einfachen Worten

Wenn jemand Ihre Website besucht, lädt sein Browser Ihre Seite herunter und führt jeden Code aus, der darauf ist — die Skripte, die Menüs herunterklappen lassen, Schaltflächen funktionieren lassen, Zahlungsformulare absenden und so weiter. Standardmäßig vertraut der Browser all dem. Er hat keine Möglichkeit zu wissen, welcher Code echt Ihrer ist und welcher von jemand anderem eingeschleust wurde.

Eine Content Security Policy (oft zu CSP verkürzt) ist eine kurze Liste von Regeln, die Ihre Website jeder Seite anhängt und die dem Browser sagt: „führe nur Code von diesen Quellen aus, die ich genehmigt habe, und weise alles andere ab.” Es ist der Unterschied zwischen einem Nachtclub, der jeden hineinlässt, und einem mit einer Gästeliste an der Tür.

Der Grund, warum das so wichtig ist, ist, dass Websites ständig manipuliert werden — nicht immer durch das Hacken Ihres Servers, sondern durch die Hintertüren, die die meisten Seiten offenlassen: ein Kommentarfeld, ein Suchfeld, ein veraltetes Plugin, ein Drittanbieter-Skript für Anzeigen oder Analyse oder ein Chat-Widget. Wenn ein Angreifer auch nur eine Zeile seines eigenen Codes auf eine Ihrer Seiten bekommt, führt der Browser ihn aus, als wäre er Ihrer. Von dort aus kann er alles lesen, was Ihre Kunden tippen — Kartennummern, Passwörter, Adressen — und es still und leise woandershin senden. Eine Content Security Policy schließt diese Tür, indem sie sich weigert, irgendetwas von einer Quelle auszuführen, die Sie nicht genehmigt haben.

Was Sie das kosten kann

Das ist nicht abstrakt. Der Angriff, den eine Content Security Policy verhindert — in eine Seite eingeschleuster Code, der Daten von Ihren eigenen Kunden stiehlt — steckt hinter einigen der größten Kartenskimming-Datenschutzverletzungen, die je verzeichnet wurden. So spielt es sich für ein normales Unternehmen meist ab:

Was es eigentlich ist (das Detail)

Eine Content Security Policy wird als einzelner HTTP-Antwort-Header ausgeliefert — eine Zeile, die Ihr Webserver mit jeder Seite sendet. Ihr Wert ist ein Satz von Direktiven, von denen jede eine Art von Inhalt und die dafür erlaubten Quellen benennt. Zum Beispiel:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

In Klartext sagt das: Lade standardmäßig nur Dinge von meiner eigenen Seite; führe nur Skripte von meiner eigenen Seite aus; erlaube keine alten Plugins; und lass andere Seiten meine nicht in einem Frame einbetten.

Wie „gut” aussieht. Unsere Prüfung sucht nicht nur nach dem Vorhandensein des Headers — sie liest die Richtlinie Direktive für Direktive und bewertet, wie stark sie tatsächlich ist, so wie es ein Sicherheitsprüfer täte. Eine starke Richtlinie:

Eine Richtlinie, die existiert, sich aber auf 'unsafe-inline', 'unsafe-eval' oder Wildcards stützt, schneidet trotzdem schlecht ab — weil sie in der Praxis wenig echten Schutz bietet. Das Ziel ist eine straffe Richtlinie, nicht irgendeine Richtlinie.

So beheben Sie es (kostenlos, ~1–2 Stunden)

Geben Sie das an Ihren IT-Menschen oder die Person, die Ihre Website betreibt — die Behebung selbst ist vollständig kostenlos. Wir berechnen ausschließlich die Überwachung, dass es vorhanden und über die Zeit korrekt bleibt; das Einschalten kostet nichts. Der Grund, warum das eine oder zwei Stunden statt Minuten dauert, ist der sorgfältige Versuchsschritt, der verhindert, dass es versehentlich Teile Ihrer eigenen Seite blockiert.

  1. Starten Sie im Nur-Bericht-Modus — setzen Sie noch nicht durch. Fügen Sie einen Content-Security-Policy-Report-Only-Antwort-Header hinzu. Das beobachtet und protokolliert, was blockiert würde, ohne tatsächlich etwas zu blockieren, sodass die Live-Seite weiterläuft, während Sie lernen, wovon jede Seite wirklich abhängt. (Wichtig: Nur-Bericht für sich allein gibt Besuchern keinen Schutz — es ist nur der sichere erste Schritt.)

  2. Bauen Sie die Richtlinie aus dem, was Ihre Seite tatsächlich nutzt. Prüfen Sie die Berichte, um jede legitime Quelle von Skripten, Stilen, Schriften und Bildern zu finden — Ihre eigene Domain, Ihre Analyse, Ihren Zahlungsanbieter, Ihren Schriften-Host, Ihr Chat-Widget — und listen Sie sie als erlaubte Quellen auf. Ein solider Ausgangspunkt ist default-src 'self' plus explizite Einträge für die vertrauenswürdigen Drittparteien, die Sie wirklich nutzen.

  3. Vermeiden Sie die Schlupflöcher, die den ganzen Sinn zunichtemachen. Halten Sie sich von 'unsafe-inline' und 'unsafe-eval' für Skripte fern und vermeiden Sie Wildcard-Quellen wie * und nackte Schemata wie https: für Skripte — diese öffnen genau die Lücke wieder, die die Richtlinie schließen soll. Wo Inline-Skripte unvermeidlich sind, verwenden Sie eine Nonce oder einen Hash, sodass nur Ihr konkreter genehmigter Code läuft.

  4. Verriegeln Sie Framing und Plugins. Fügen Sie frame-ancestors 'self' hinzu (das stoppt auch, dass andere Seiten Ihre einbetten, um Ihre Kunden zu täuschen, und erfüllt die verwandte Clickjacking-Prüfung) und object-src 'none', um alte plugin-basierte Angriffe zu blockieren.

  5. Wechseln Sie von Nur-Bericht zu durchsetzend. Sobald die Berichte sauber sind und die Seite funktioniert, ändern Sie den Header-Namen von Content-Security-Policy-Report-Only zu Content-Security-Policy. Das ist der Schritt, der tatsächlich Schutz liefert — eine reine Nur-Bericht-Richtlinie tut das nicht und wird die Prüfung nicht bestehen.

    Wo Sie den Header setzen, hängt von Ihrer Plattform ab:

    • Cloudflare: Rules → Transform Rules → Modify Response Header → Content-Security-Policy setzen. (Sie können Cloudflare auch für den Nur-Bericht-Versuch nutzen.)
    • Nginx: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache: Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
    • IIS (web.config): Fügen Sie einen benutzerdefinierten HTTP-Antwort-Header namens Content-Security-Policy mit der Richtlinie als Wert hinzu.
    • Google Workspace / Microsoft 365: Diese betreiben Ihre E-Mail, nicht Ihre öffentliche Website, sodass die Richtlinie dort gesetzt wird, wo Ihre Website tatsächlich gehostet wird (Cloudflare oder Ihr Webhoster oben), nicht in Ihrer E-Mail-Verwaltung.
  6. Prüfen Sie Ihre Domain erneut, um zu bestätigen, dass die Richtlinie nun als eingeschaltet und durchsetzend angezeigt wird, ohne schwächende Schlupflöcher.

Häufige Fehler

FAQ

Ich bin nicht technisch versiert — kann ich das selbst erledigen?

Sie müssen die Details nicht verstehen. Das ist eine Einstellung, die von der Person hinzugefügt wird, die Ihre Website oder Ihr Hosting betreibt, und bei Diensten wie Cloudflare ist es weitgehend geführt. Geben Sie ihr den Abschnitt 'So beheben Sie es' weiter. Es ist kostenlos; die eine Vorsicht ist, dass es zuerst sorgfältig in einem reinen Beobachtungs-Versuch ausgerollt werden sollte, damit es nicht versehentlich Teile Ihrer eigenen Seite blockiert — was genau das ist, was die Schritte abdecken.

Ich habe bereits das Schloss-Symbol und ein SSL-Zertifikat — ist meine Seite nicht sicher?

Das Schloss-Symbol sichert die Auslieferung Ihrer Seite; es überwacht nicht, was darin läuft. Wenn bösartiger Code je auf einer Seite landet — über ein gehacktes Plugin, eine kompromittierte Anzeige oder ein eingeschleustes Feld —, hindert das Schloss-Symbol ihn nicht daran, Daten zu stehlen. Eine Content Security Policy ist die Schicht, die begrenzt, was überhaupt laufen darf. Sie schützen verschiedene Dinge, und Sie wollen beide.

Könnte das Einschalten meine Seite lahmlegen?

Das kann es, wenn es aggressiv auf einmal eingeschaltet wird, weil es legitime Skripte blockieren kann, die Sie tatsächlich nutzen. Deshalb ist der Standardansatz, in einem 'Nur-Bericht'-Versuchsmodus zu starten, der beobachtet, ohne zu blockieren, alles zu beheben, was er markiert, und es erst dann durchzusetzen. Auf diese Weise gemacht ist es sicher — und der Versuchsschritt ist in die Behebung unten eingebaut.

Wir haben es bereits in den 'Nur-Bericht'-Modus gesetzt — sind wir abgesichert?

Nein, und das ist das häufigste falsche Sicherheitsgefühl. Der Nur-Bericht-Modus beobachtet und protokolliert, was blockiert würde, aber er blockiert nichts — Besucher erhalten null echten Schutz. Es ist nur der sichere erste Schritt. Unsere Prüfung gibt dem Nur-Bericht-Modus einen kleinen Bruchteil der Anrechnung einer echten Richtlinie und wird ihn nicht als Bestehen verbuchen. Sie sind erst geschützt, sobald Sie in den durchsetzenden Modus wechseln.

Beeinflusst das unsere Bewertung, oder ist es nur beratend?

Es beeinflusst Ihre Bewertung. Die Content-Security-Policy-Prüfung ist bewertet und bis zu 25 Punkte in der Kategorie Web-Sicherheit wert. Eine fehlende oder schwache Richtlinie wird als hohe Schwere markiert und zieht Ihre Bewertung herab — und es ist genau die Art von Lücke, nach der der Sicherheitsfragebogen eines Kunden fragt.

Unser Entwickler hat eine Richtlinie hinzugefügt, aber die Bewertung ist trotzdem niedrig — warum?

Eine Richtlinie kann existieren und trotzdem schwach sein. Die häufigsten Übeltäter sind Schlupflöcher wie 'unsafe-inline' und 'unsafe-eval' für Skripte oder Wildcard-Quellen (ein nacktes *), die genau die Lücke wieder öffnen, die die Richtlinie schließen soll. Unsere Prüfung liest die Richtlinie Direktive für Direktive und wertet diese Schwächen herab — eine Richtlinie, die alles erlaubt, schneidet kaum besser ab, als gar keine zu haben. Die Behebung ist, die Skript-Regeln zu verschärfen, indem man Nonces oder Hashes statt dieser Schlupflöcher verwendet.