Frage

Ist Cross-Site Request Forgery möglich gegen einen staatenlos RESTful Service?

Ich spreche nicht über pseudo-REST, wo der Server, erinnert sich, dass Sie über ein Cookie angemeldet. Ich spreche über reinen No-Anwendung-State-on-the-Server REST ohne Cookies.

Ich bin mit SSL und Basic Authentication. Für jede Anforderung hat, dass Authorization-Header, dort zu sein. Es gibt keine „Session“ in dem JSP Sinne, obwohl es irgendeine Art von Sitzung auf der SSL-Ebene ist.

Nehmen wir also an ich die legitime Webseite bin sehen, die Ajax-Anfragen macht, und irgendwie gehe ich auf eine andere Seite in der gleichen Registerkarte oder einer anderen Registerkarte, und diese Seite macht die gleiche Ajax-Anfrage. (Ich gehe davon aus gibt es keinen schädlichen Code auf der legitimen Webseite;. Das ist eine andere Sache ganz und alles ist möglich in diesem Fall)

Wenn die zweite Seite der Ajax-Anfrage macht, wird der Browser auf dem gleichen Authorization-Header setzen? das heißt der Browser sagen: „Oh, Sie wollen wieder dorthin gehen? Hey, ich habe gerade zufällig noch den Schlüssel!“?

Auch könnte nicht das schädliche Skript die xhr Antrag tun, dann in den Rückruf nehmen die Anfrage von den ioargs, den Autorisierungs-Header und un-Base64 den Namen und das Passwort?

War es hilfreich?

Lösung

Disclaimer: Ich bin kein Sicherheitsexperte

.

Mit HTTP Basic Auth nicht CSRF-Attacken über GET-Anfragen verhindern. Z.B. jemand anderes kann einen img-Tag in ihrer HTML-Seite enthalten, die ein GET auf einigen bekannten URI tun, und Ihr Browser wird entlang der grundlegenden Authentifizierungsinformationen glücklich senden. Wenn die GET-Operation „sicher“ ist (das ist die Regel # 1 für etwas behaupten RESTful zu sein), wird dies kein Problem schaffen (über verschwendete Bandbreite).

Ajax ist kein Problem, da der Same Origin Policy.

einschließlich Nur ein vom Server generierten Token im HTML Sie erzeugen und validieren ihre Präsenz in Anfragen Anmeldeformular werden Sie von jemandem schützt auch einfach mit einer „fremden“ Form in ihren Seiten verwenden. Sie könnten von den Browsern dies die Inhaltstypen erzeugt begrenzen; keine Notwendigkeit, so für XHR-Anforderungen zu tun.

Andere Tipps

Ob oder ob nicht CSRF-Schutz benötigt wird, basiert auf zwei Faktoren zurückzuführen: -

  1. Ist die Anforderung eine Zustandsänderung Aktion (nicht die gleiche wie REST API Staatenlosigkeit) tun - Zustand wechselnden Aktionen sind alle Maßnahmen, die den Zustand der Anwendung .. zum Beispiel wird sich ändern, löschen etwas, fügen Sie etwas, aktualisieren Sie etwas. Dies sind Aktionen mit denen die Anwendung des gesicherten Zustand des Benutzers ändern. Alle POST-Anfragen und einige Get-Requests unter diese Kategorie fallen wird. REST-APIs können Zustandsänderungs Aktionen haben.

  2. Ist die Authentifizierung durch Browser (nicht auf Cookies beschränkt) - CSRF geschieht, weil Authentifizierungsinformationen in der Anforderung von Browser enthalten sind, unabhängig davon, ob die Anforderung durch den Benutzer gestartet wurde, oder einige andere offene Register. So eine Art der Authentifizierung, in dem Browser kann selbst Informationen enthalten muss CSRF-Schutz. Dazu gehören sowohl Cookies in Ihrem Browser-Sitzungen und die Standardauthentifizierung.

Für alle Anfragen, die über 2 Kategorien CSRF Schutz fallen in erforderlich ist.

Wie oben von Stephan beantwortet werden Ajax-Anfragen geschützt, da der Same Origin Policy (SOP). SOP verhindert eine weitere Domäne von Lesen des Inhalts von Zieldomäne gesendet. Also das schädliche Skript kann nicht die Berechtigung Header lesen. Aber SOP nicht daran hindert, eine andere Domäne von Anfragen an die Zieldomäne gesendet werden. Also das schädliche Skript kann noch Zustandsänderungsanforderungen an die Zieldomäne machen. Browser sind Authentifizierungsinformationen und Cookies in diesem Antrag, so Server, ob diese Anforderung von der bösartigen Domain oder den Benutzer entstanden wissen muss. Aus diesem Grund CSRF-Schutz erforderlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top