Die Richtlinie für denselben Ursprung ist eine Sicherheitsfunktion des Browsers, die einschränkt, wie Dokumente und Skripts eines Ursprungs mit Ressourcen eines anderen Ursprungs interagieren können.
Ein Browser kann Ressourcen von mehreren Websites gleichzeitig laden und anzeigen. Möglicherweise sind mehrere Tabs gleichzeitig geöffnet oder eine Website bettet mehrere iFrames von verschiedenen Websites ein. Wenn es keine Einschränkungen für die Interaktionen zwischen diesen Ressourcen gibt und ein Skript von einem Angreifer manipuliert wird, könnte das Skript alles im Browser eines Nutzers offenlegen.
Die Richtlinie für denselben Ursprung verhindert dies, indem sie den Lesezugriff auf Ressourcen blockiert, die von einem anderen Ursprung geladen wurden. „Aber Moment“, sagen Sie jetzt, „ich lade ständig Bilder und Skripts von anderen Ursprüngen.“ Browser erlauben einige Tags, um Ressourcen von einem anderen Ursprung einzubetten. Diese Richtlinie ist größtenteils ein historisches Artefakt und kann Ihre Website für Sicherheitslücken wie Clickjacking mit iFrames anfällig machen. Sie können das ursprungsübergreifende Lesen dieser Tags mithilfe einer Content Security Policy einschränken.
Was gilt als Same-Origin?
Ein Ursprung wird durch das Schema (auch als Protokoll bezeichnet, z. B. HTTP oder HTTPS), den Port (falls angegeben) und den Host definiert. Wenn alle drei für zwei URLs gleich sind, gelten sie als Same-Origin. Beispiel: http://www.example.com/foo hat denselben Ursprung wie http://www.example.com/bar, aber nicht wie https://www.example.com/bar, da das Schema unterschiedlich ist.
Was ist erlaubt und was wird blockiert?
Im Allgemeinen ist das Einbetten einer ursprungsübergreifenden Ressource zulässig, während das Lesen einer ursprungsübergreifenden Ressource blockiert wird.
| iFrames |
Die ursprungsübergreifende Einbettung ist in der Regel zulässig (abhängig von der X-Frame-Options-Anweisung), das ursprungsübergreifende Lesen (z. B. der Zugriff auf ein Dokument in einem iFrame über JavaScript) jedoch nicht.
|
| CSS |
Ursprungsübergreifendes CSS kann mit einem <link>-Element oder einer @import in einer CSS-Datei eingebettet werden. Möglicherweise ist der richtige Content-Type-Header erforderlich.
|
| Formulare |
Ursprungsübergreifende URLs können als action-Attributwert von Formularelementen verwendet werden. Eine Webanwendung kann Formulardaten in ein ursprungsübergreifendes Ziel schreiben.
|
| Bilder | Das Einbetten von ursprungsübergreifenden Bildern ist zulässig. Das Lesen von ursprungsübergreifenden Bilddaten (z. B. das Abrufen von Binärdaten aus einem ursprungsübergreifenden Bild mit JavaScript) ist jedoch blockiert. |
| Multimedia |
Ursprungsübergreifende Video- und Audioinhalte können mit den Elementen <video> und <audio> eingebettet werden.
|
| Skript | Ursprungsübergreifende Skripts können eingebettet werden. Der Zugriff auf bestimmte APIs (z. B. ursprungsübergreifende Abrufanfragen) kann jedoch blockiert werden. |
TODO: DevSite – Bewertung „Nachdenken und prüfen“
Clickjacking verhindern
Bei einem sogenannten Clickjacking-Angriff wird eine Website in ein iframe eingebettet und mit transparenten Schaltflächen überlagert, die auf ein anderes Ziel verweisen. Nutzer werden dazu verleitet, zu glauben, dass sie auf Ihre Anwendung zugreifen, während sie Daten an Angreifer senden.
Wenn du verhindern möchtest, dass andere Websites deine Website in einen iFrame einbetten, füge den HTTP-Headern eine Content Security Policy mit der frame-ancestors-Anweisung hinzu.
Alternativ können Sie den HTTP-Headern X-Frame-Options hinzufügen. Eine Liste der Optionen finden Sie auf MDN.
Zusammenfassung
Hoffentlich sind Sie ein wenig erleichtert, dass Browser so viel tun, um die Sicherheit im Web zu gewährleisten. Obwohl Browser versuchen, den Zugriff auf Ressourcen zu blockieren, möchten Sie manchmal in Ihren Anwendungen auf ursprungsübergreifende Ressourcen zugreifen. Im nächsten Leitfaden erfahren Sie mehr über Cross-Origin Resource Sharing (CORS) und wie Sie dem Browser mitteilen, dass das Laden von ursprungsübergreifenden Ressourcen aus vertrauenswürdigen Quellen zulässig ist.