Same-Origin-Policy: Warum Browser fremde Daten abschotten
Kurz: Die Same-Origin-Policy erlaubt Skripten einer Seite nur den Zugriff auf Daten derselben Herkunft (Protokoll, Host, Port); sie schützt Nutzer vor bösartigen Seiten.
Genauer: Du bist bei einer Bank eingeloggt und öffnest in einem anderen Tab eine fremde Seite. Ohne Schutz könnte deren JavaScript Daten deines Bankkontos abrufen. Die Same-Origin-Policy (SOP) ist die grundlegende Sicherheitsregel der Browser dagegen.
Im Detail
Was ist eine Origin?
Eine Origin besteht aus Protokoll + Host + Port:
https://beispiel.deundhttps://beispiel.de/seite→ gleich.http://beispiel.de→ anders (Protokoll).https://api.beispiel.de→ anders (Host).https://beispiel.de:8443→ anders (Port). Nur bei gleicher Origin darf JavaScript die Antworten lesen und auf das DOM zugreifen.
Was die SOP verhindert und was nicht
Blockiert: Lesen von Antworten per fetch/XHR an fremde Origins, Zugriff auf das DOM fremder iframes, Lesen fremder Cookies per JavaScript.
Erlaubt: Einbetten (nicht Lesen) von Bildern, Skripten, Stilen, iframes, das Senden von Formularen und Links. Deshalb braucht man weitere Schutzmaßnahmen gegen CSRF (Anfragen mit deinen Cookies von fremden Seiten) und XSS (fremder Code auf der eigenen Seite, der innerhalb der Origin läuft und die SOP umgeht).
Lockerungen
- CORS: Der Server erlaubt bestimmten Origins ausdrücklich den Zugriff (Header
Access-Control-Allow-Origin). - postMessage: kontrollierter Nachrichtenaustausch zwischen Fenstern/iframes.
- document.domain (veraltet) und JSONP (veraltet, gefährlich).
- Cookie-Attribute
SameSite,HttpOnly,Secureergänzen den Schutz.
Praxis
Fremde Daten kannst du nicht einfach im Browser abrufen; baue stattdessen einen eigenen Server/Proxy oder aktiviere CORS am Server. Binde nur vertrauenswürdige Skripte ein, nutze Content Security Policy, Subresource Integrity und Isolation (Cross-Origin-Opener-Policy). Die SOP schützt Nutzer, nicht Server: Schütze Schnittstellen zusätzlich durch Authentifizierung und Autorisierung.
Siehe auch: CORS, CSRF, XSS, CORS-Fehler