Was CORS macht

CORS regelt, welche fremden Websites die Antworten deines Servers im Browser lesen dürfen. Falsch eingestellt, kann jede Website im Namen deiner Besucher Daten abrufen.

So funktioniert es

Browser trennen Websites voneinander. Ein Skript auf boese.example darf zwar eine Anfrage an deinen Server schicken, die Antwort aber nicht lesen. Diese Regel heißt Same-Origin-Policy; eine Origin (Herkunft) ist die Kombination aus Schema, Host und Port, etwa https://example.com.

CORS (Cross-Origin Resource Sharing) ist die kontrollierte Ausnahme. Der Browser schickt bei der Anfrage die Herkunft der Seite im Header Origin mit. Antwortet dein Server mit Access-Control-Allow-Origin und dieser Herkunft (oder *), darf das Skript die Antwort lesen. Mit Access-Control-Allow-Credentials: true gilt das auch für Anfragen mit den Cookies des Besuchers, also mit seiner Anmeldung.

bytereport fragt deine Startseite dafür einmal mit einer erfundenen fremden Herkunft an und schaut, was dein Server zurückgibt.

Worauf es ankommt

  • Nicht jede Herkunft übernehmen. Manche Server schreiben einfach den mitgeschickten Origin zurück in Access-Control-Allow-Origin. Dann darf jede Website die Antworten lesen.
  • Nie zusammen mit Credentials. Übernimmt der Server jede Herkunft und erlaubt dabei Cookies, kann jede Website im Namen angemeldeter Besucher deren Daten abrufen. Das ist der gefährlichste Fall.
  • * nur für Öffentliches. Für Schriften, öffentliche Daten oder eine offene API ist Access-Control-Allow-Origin: * in Ordnung. Browser senden dabei keine Cookies mit. Antworten mit persönlichen Daten gehören nicht so freigegeben.
  • Feste Liste statt Spiegel. Brauchen bestimmte Seiten Zugriff, prüft der Server den Origin gegen eine feste Liste und gibt nur bei einem Treffer diese Herkunft zurück, zusammen mit Vary: Origin, damit Caches die Antworten nicht verwechseln.

So richtest du es ein

Eine normale Website braucht meist gar kein CORS; dann sendet der Server die Header einfach nicht. Wo es nötig ist, etwa für eine API oder für Schriften, die eine andere Domain lädt, nennt die Antwort feste Adressen:

Access-Control-Allow-Origin: https://app.example.com
Vary: Origin

Eingestellt wird CORS im Webserver, im CDN oder, meist, in der Anwendung: Frameworks haben dafür eine eigene Einstellung oder Middleware. Steht dort eine Option wie „alle Origins erlauben“ zusammen mit Credentials, ist das genau der gefährliche Fall. Das ist Arbeit für deine Entwickler oder Agentur. Prüfe auch API-Pfade, nicht nur die Startseite: Der Bericht sieht nur sie.

Mehr zu Abschottung und Datenschutz

Jetzt deine Website prüfen

Der Security-Check zeigt in wenigen Sekunden, welche Header fehlen, mit fertigen Zeilen zum Kopieren.

Website prüfen