Bei dieser Frage geht es nur um den Schutz vor Cross Site Request Forgery-Angriffen.
Es geht speziell um: Ist der Schutz über den Origin-Header (CORS) so gut wie der Schutz über ein CSRF-Token?
Beispiel:
- Alice ist mit ihrem Browser unter Verwendung eines Cookies unter " https://example.com " angemeldet . Ich gehe davon aus, dass sie einen modernen Browser benutzt.
- Alice besucht " https://evil.com " und der clientseitige Code von evil.com führt eine Art Anfrage an " https://example.com " aus (klassisches CSRF-Szenario).
So:
- Wenn wir den Origin-Header (serverseitig) und kein CSRF-Token nicht überprüfen, haben wir eine CSRF-Sicherheitslücke.
- Wenn wir ein CSRF-Token überprüfen, sind wir sicher (aber es ist ein bisschen langweilig).
- Wenn wir den Origin-Header überprüfen, sollte die Anforderung vom clientseitigen Code von evil.com genauso blockiert werden wie bei Verwendung eines CSRF-Tokens - außer wenn es irgendwie möglich ist, dass der Code von evil.com den Origin-Header setzt.
Ich weiß, dass dies mit XHR nicht möglich sein sollte (siehe z. B. Sicherheit für die gemeinsame Nutzung von Ressourcen zwischen verschiedenen Ursprüngen ), zumindest nicht, wenn wir darauf vertrauen, dass die W3C-Spezifikation in allen modernen Browsern korrekt implementiert wird (können wir?)
Aber was ist mit anderen Arten von Anfragen - z. B. Formular senden? Laden eines script / img / ... -Tags? Oder eine andere Möglichkeit, mit der eine Seite (legal) eine Anfrage erstellen kann? Oder vielleicht ein bekannter JS-Hack?
Hinweis: Ich spreche nicht über
- native Anwendungen,
- manipulierte Browser,
- Cross-Site-Scripting-Fehler auf der Seite von example.com,
- ...
Origin
? Das würde den CORS-Schutz negieren.