Ich habe gelesen, über die Verwendung eines Synchronizer-Token-Muster CSRF (CSRF bedeutet Cross-Site-Anfrage Fälschung.) Zu verhindern, und ich verstehe nicht, wie es wirklich sicher.Wie wird Synchronizer Token Pattern verwendet, um CSRF sicher zu verhindern?
Lassen Sie uns sagen, ich habe eine gefälschte Bank-Website fakebank.com mit zwei Urls:
fakebank.com/withdrawForm.html
- eine GET-Anfrage, die die Geldformfakebank.com/doWithdraw
zurückzuziehen zeigt - POST an diese URL die zurückziehen zu tun
Mein Verständnis der Sicherheitslücke ist, dass maliciousSite.com
eine POST-Anforderung an fakebank.com/doWithdraw
fälschen können, und wenn Sie sich gerade zu fakebank angemeldet sind, wird der POST erfolgreich sein.
Nehmen wir an, wir implementieren ein Synchronizer Token Pattern, das einen geheimen Code auf fakebank.com/withdrawForm.html
einbetten wird. Kann maliciousSite.com
nicht einfach eine GET-Anfrage für dieses Formular spoofen, das HTML-Ergebnis analysieren, das Token abrufen und dann die POST-Anfrage mit diesem Token erstellen?
Dies ist davon auszugehen, dass fakebank.com HTTP-Referrer oder Origin nicht überprüft oder maliciousSite.com
erfolgreich spoofiert, dass der Referrer/Origin fimebank.com ist.
Wenn Sie Javascript in den Browser eines Benutzers injizieren können, um den Angriff zu initiieren, was hält Sie einfach einbetten einige Jquery, um eine GET-Anfrage zu tun, zu analysieren, dann einen POST alle innerhalb der gleichen '
Und das ist genau der Punkt. Die Same Origin Policy im Browser erlaubt nicht GET Anfragen an andere Websites. So kann keine Site das CSRF-Token von einem anderen abrufen, der Javascipt innerhalb des Browsers verwendet.
Quelle
2013-04-17 01:13:42 deceze