Alle logischen Schleife Löcher in diese Idee für Verhinderung von Cross-Site Request Forgery?

StackOverflow https://stackoverflow.com/questions/1072497

Frage

Ich habe gelesen, mehrere XSRF-Lösungen, die sich auf das hinzufügen von mehr Token auf die Antwort, die helfen Sie zu schützen-code, der nur ausgeführt wird, auf der POST.

d.h.dies wäre ein Schritt in Angriff unter Berufung auf eine Seite, die eine Antwort auf HTTP-GET -

<img src="http://amazon.com/buybook/anarchistscookbook/mailto/me/execute.php">

Aber mit besseren Bibliotheken wie jquery, die immer einfacher zu schreiben, bösartigen javascript-XmlHttpRequest-Skripts, das eine zwei-Schritt-Angriff (GET, analysieren die Anti-XSRF viewstate/query-string/extra cookie, etc) und senden Sie eine POST.(Oder ist es?Ich mache mir keine Gedanken über die AES geknackt jeder Zeit bald sollte ich auch Sorge über 2 Schritt XSRF-Angriffe auf HTTP-POST-Aktionen immer als einfach, da das img-tag-Attacke, die oben gezeigt?)

Ich nehme an, die einen Schritt angreifen, meistens tharted nichts zu tun sensive auf BEKOMMEN, könnten beide Arten von Angriffen werden tharted durch die die website-Benutzer zu lösen ein CAPTCHA, das dann yeilds ein query-string-token, die erforderlich wäre, für alle URLs für den rest der Sitzung?

So weit wie es scheint, es würde nur scheitern, wenn das CAPTCHA ausfällt, wie wenn die OCR-software den text Lesen kann oder wenn es eine mechanische turk Komponente.

EDIT:Die besonderen Angriff ist eine E-Mail mit xhr javascript oder image-Tags.So würde der code ausgeführt werden, in E-Mail-client-browser oder aus einer HTML-Seite geladen, die aus dem lokalen Dateisystem.Für simplicities sake, die ich mir vorstelle, die Website hat keine XSS-Sicherheitslücken (ie.keine Möglichkeiten für böswillige Benutzer zu injizieren Ihren HTML-Code in die HTML-Website sendet als Antwort)

War es hilfreich?

Lösung

Der Punkt ist, dass JavaScript nicht den anti-XSRF Token aus einem domänenübergreifenden Kontext lesen, und XMLHTTPRequest ist gleich Herkunft nur, so dass es nicht verwendet werden kann, das Token zu stehlen.

Wenn Ihre Website bereits über eine XSS-Schwachstelle hat, sind Sie bereits abgespritzt und anti-XSRF Token wird dir nicht helfen.

Andere Tipps

Weder XmlHttpRequests noch JavaScript Rahmenmanipulations Arbeit Cross-Domain in diesen Tagen; das wäre Irrweg sein. CSRF greift in der Regel in diesen Tagen entweder der Image-Tag bestehen, wie Sie erwähnt oder autogenerating eine Form, die Beiträge an einen anderen Ort. Jedoch (vermutlich eine Nonce auf einer Pro-Sitzung Basis generierte) einen Anti-XSRF Token Abrufen ist so gut wie unmöglich. Nur wenn es eine überaus schlechte Token, das nicht die Benutzersitzung und IP-Adresse ist eine serverseitige könnte möglicherweise nicht überprüft Sprache, es abzurufen genutzt werden, und dann mit einem clientseitigen CSRF zu kombinieren. Abgesehen von Token, viele Leute stoppen CSRF einfach durch die Referrer Überprüfung und alle Remote-Domänen zu blockieren. CSRF mit XmlHttpRequests Einreichen ist praktisch unmöglich, dank Domain Einschränkungen.

Auf jeden Fall müssen Sie sich keine Sorgen über XmlHttpRequest eine Remote-Domäne zugreifen zu können. Das einzige Mal, so etwas passieren könnte, ist, wenn Sie eine XSS-Schwachstelle haben, wobei in diesem Fall, wie EricLaw sagte, du bist schon abgespritzt.

Ich denke, du bist verwirrt über die same-origin-Richtlinie.Anforderung einer html-Seite, in eine lokale Datei nicht umgehen dieser Datenschutzerklärung.In der Tat, ich glaube, noch mehr strenge Regeln gelten, zu einer Datei-Ressource.Sie werden feststellen, dass Javascript in eine lokale html-Datei nicht in der Lage zu machen ein erfolgreiches Anfrage zurückgegeben nicht-lokale Ressource.

Moderne Browser nicht erlauben, Javascript in lokalen HTML-Dateien, Zugriff auf remote - HTTP-Ressourcen.

In dem browser haben Sie in der Lage gewesen, um erfolgreich führen Sie eine cross-domain-XHR aus einer Datei:/// Ressource?

Ich habe getestet, die in ie6, ie7, ie8, firefox 3, firefox 3.5 und neueren Versionen von chrome, opera und safari auf windows;Sie alle lehnen die cross-domain-http-Anforderung.

<html>
<head>
<script 
  type="text/javascript" 
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $( '#xhr' ).append( 'replace me with remote xhr' );
    $( '#xhr' ).load( 'http://stackoverflow.com/', function() {
      $( '#xhr' ).append( 'xhr load complete' );        
    });
  });
</script>
</head>
<body>
  test
  <div id="xhr">original</div>
</body>
</html>

Es ist möglich, dass einige sehr viel älteren Browsern sind weniger restriktiv.

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