Frage

Mit AntiForgeryToken jede Anforderung erfordert ein gültiges Token passieren, so bösartige Web-Seiten mit einfachen Skript veröffentlichen Daten auf meiner Web-Anwendung wird nicht gelingen.

Was aber, wenn ein schädliches Skript zunächst einige einfache GET-Anfrage machen (von Ajax ), um die Seite mit dem Fälschungs Token in einem verborgenen Eingabefeld zum Download, extrahiert sie, und verwenden sie eine gültige POST ?

Ist es möglich, oder bin ich etwas fehlt?

War es hilfreich?

Lösung

Ja, das ist alles, was Sie tun müssen.

Solange Sie ein neues Token auf jeder geschützten Seite generieren, mit <%= Html.AntiForgeryToken() %> und immer sicherzustellen, dass es in jeder geschützten Aktion geprüft, mit [ValidateAntiForgeryToken]

Dies implementiert die Synchronizer Token Muster wie beim CSRF Prävention Cheat Blatt bei OWASP.

für ein Skript Um bei der Herstellung eines akzeptablen Antrag erfolgreich zu sein, wäre es muss zuerst die Form erhalten und das Token zu lesen und dann den Token senden. Same Origin Policy wird diese von Stopp in einem Browser zu dürfen. Eine Website canot eine AJAX-Stil HTTP-Anfrage an einem anderen Ort machen; nur auf sich selbst. Wenn aus irgendeinem Grund denselben Ursprung Politik verletzt werden können, dann werden Sie anfällig werden.

Beachten Sie, dass, wenn Sie eine Cross-Site-Scripting-Schwachstelle haben, dann kann ein Angreifer die XSS-Schwachstelle missbrauchen den Schutz durch den gleichen Ursprung politischen Kontext zu umgehen (da das Skript wird nun von der eigenen Seite ausgeführt wird, so SOP erfolgreich ist). Das injizierte Skript kann dann glücklich lesen und das Token erneut einreichen. Diese Technik erhalten Vergangenheit CSRF-Schutz über XSS hat sich in einigen Würmern vor kurzem üblich. Grundsätzlich, wenn Sie XSS haben, Ihr CSRF-Schutz ist eine Verschwendung von Zeit, so stellen Sie sicher, entweder nicht anfällig sind.

Eine andere Sache zu achten ist Flash und Silverlight. Beiden Technologien abonnieren nicht auf die gleiche Ursprung Politik und stattdessen Cross-Domain-Policy-Dateien verwenden, um den Zugriff auf Remote-Ressourcen zu beschränken. Flash / Silverlight-Skript kann nur Zugriff auf Ressourcen auf Ihrer Seite, wenn Sie eine Cross-Domain-Richtlinien XML-Datei auf Ihrer eigenen Website veröffentlichen. Wenn Sie diese Datei nicht veröffentlichen, immer nur eine weiße Liste von vertrauenswürdigen Servern von Drittanbietern erlauben, und niemals zulassen *.

Lesen Sie mehr über CSRF bei OWASP Siehe auch: XSS Prävention Spickzettel

Andere Tipps

Was aber, wenn ein schädliches Skript wird einige einfache GET-Anfrage machen erste (von AJAX), um die Seite mit Fälschungs Token in versteckten Eingabefeld zum Download, extrahiert sie, und verwenden Sie es gültig POST zu machen?

Ja, das ist wahr, aber, wenn es in einem Browser zu landen ist nicht, das ist nicht ein CSRF-Angriff.

Wenn es es endet den Browser nach oben (zum Beispiel über eine HTTP-Request-Schaben in Code Server-Seite), dann würde, was den schaben Code passieren wird eine CSRF-Token erhalten. Jedoch Ihre berechtigten, authentifizierte Benutzer einen anderen Token auf ihre Maschine setzen bekommen. Da das Zeichen, daß der Abstreifer zum einen an die Benutzer ausgegeben unterscheidet hebt dann wird der POST fehl.

Wenn Sie nicht-Browser-Scripts machen Beiträge stoppen wollen, dann müssen Sie einen anderen Ansatz zu ergreifen, um zu validieren es ist ein Mensch.

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