it-swarm.com.de

Domainübergreifendes POST-Formular

Ich habe überall Artikel und Posts (einschließlich SO) zu diesem Thema gesehen, und der vorherrschende Kommentar ist, dass dieselbe Origin-Richtlinie ein Formular POST zwischen Domains) verhindert. Der einzige Ort, den ich gesehen habe jemand schlägt vor, dass die Same-Origin-Richtlinie nicht für Form-Posts gilt, ist hier .

Ich hätte gerne eine Antwort von einer "offiziellen" oder formellen Quelle. Kennt zum Beispiel jemand den RFC, der behandelt, wie Same-Origin einen Formular-POST beeinflusst oder nicht?

Klarstellung : Ich frage nicht, ob ein GET oder POST) erstellt und an eine beliebige Domain gesendet werden kann :

  1. wenn Chrome, IE oder Firefox zulassen, dass Content von Domain 'Y' ein POST an Domain 'X' sendet
  2. wenn der Server, der POST empfängt, überhaupt Formularwerte sieht. Ich sage dies, weil die Mehrheit der Online-Diskussion Tester aufzeichnet, die sagen, der Server habe den Beitrag erhalten, aber die Formularwerte waren alle leer. ausgezogen.
  3. In welchem ​​offiziellen Dokument (d. H. RFC) wird das erwartete Verhalten erläutert (unabhängig davon, was die Browser derzeit implementiert haben).

Übrigens: Wenn Same-Origin Form-POSTs nicht beeinflusst, wird etwas offensichtlicher, warum Token gegen Fälschungen erforderlich sind. Ich sage "etwas", weil es zu leicht zu glauben scheint, dass ein Angreifer einfach ein HTTP-GET ausgeben könnte, um ein Formular abzurufen, das das Anti-Fälschungs-Token enthält, und dann ein unerlaubtes POST das das enthält Gleiches Token. Kommentare?

130
Brent Arias

Dieselbe Origin-Richtlinie gilt nur für browserseitige Programmiersprachen. Wenn Sie also versuchen, mithilfe von JavaScript auf einem anderen Server als dem Origin-Server zu veröffentlichen, wird die gleiche Origin-Richtlinie angewendet, wenn Sie jedoch direkt aus dem Formular veröffentlichen, d. H. Die Aktion verweist auf einen anderen Server wie:

<form action="http://someotherserver.com">

wenn beim Posten des Formulars kein Javascript erforderlich ist, gilt dieselbe Origin-Richtlinie nicht.

Siehe Wikipedia für weitere Informationen

157
Suresh Kumar

Es ist möglich, eine beliebige GET- oder POST) -Anforderung zu erstellen und diese an einen beliebigen Server zu senden, auf den ein Browser des Opfers zugreifen kann. Dies umfasst Geräte in Ihrem lokalen Netzwerk, z. B. Drucker und Router.

Es gibt viele Möglichkeiten, einen CSRF-Exploit zu erstellen. Ein einfacher POST auf CSRF basierender Angriff kann mit der .submit() Methode gesendet werden. Komplexere Angriffe wie Cross-Site-Datei-Upload CSRF-Angriffe nutzen CORS-Nutzung des xhr.withCredentals-Verhaltens .

CSRF verstößt nicht gegen die Same-Origin Policy für JavaScrip t, da sich SOP mit JavaScript befasst reading die Antwort des Servers auf eine Client-Anfrage. CSRF-Angriffe kümmern sich nicht um die Antwort, sondern um einen Nebeneffekt ​​oder eine Statusänderung, die durch die Anforderung hervorgerufen wird, z. B. das Hinzufügen eines administrativen Benutzers oder das Ausführen von beliebigem Code auf dem Server.

Stellen Sie sicher, dass Ihre Anforderungen mit einer der im OWASP CSRF Prevention Cheat Sheet beschriebenen Methoden geschützt sind. Weitere Informationen zu CSRF finden Sie auf der OWASP-Seite zu CSRF .

40
Mikey

Dieselbe Origin-Richtlinie hat nichts mit dem Senden einer Anfrage an eine andere URL (ein anderes Protokoll oder eine andere Domäne oder einen anderen Port) zu tun.

Es geht darum, den Zugriff auf (Lese-) Antwortdaten einer anderen URL einzuschränken. So kann JavaScript-Code auf einer Seite an eine beliebige Domain gesendet oder Formulare auf dieser Seite an eine beliebige Stelle gesendet werden (es sei denn, das Formular befindet sich in einem Iframe mit einer anderen URL).

Was diese POST Requests jedoch ineffizient macht, ist, dass diese Requests keine Antifälschungs-Token enthalten und daher von der anderen URL ignoriert werden. Wenn das JavaScript versucht, diese Sicherheits-Token abzurufen, senden Sie AJAX Anfrage an die URL des Opfers, der Zugriff auf diese Daten wird durch Same Origin Policy verhindert.

Ein gutes Beispiel: hier

Und eine gute Dokumentation von Mozilla: hier

14
Mohsenme