Ich habe überall Artikel und Beiträge (einschließlich SO) zu diesem Thema gesehen, und der vorherrschende Kommentar lautet, dass die Richtlinie mit demselben Ursprung ein Formular POST über Domänen hinweg verhindert. Der einzige Ort, an dem ich jemanden gesehen habe, der vorschlägt, dass die Richtlinie mit demselben Ursprung nicht für die Erstellung von Posts gilt, ist hier .
Ich hätte gerne eine Antwort von einer "offiziellen" oder formelleren Quelle. Kennt jemand beispielsweise den RFC, der angibt, wie sich derselbe Ursprung auf einen Formular-POST auswirkt oder nicht?
Klarstellung : Ich frage nicht, ob ein GET oder POST erstellt und an eine Domain gesendet werden kann. Ich frage:
- Wenn Chrome, IE oder Firefox es Inhalten aus der Domäne "Y" erlauben, einen POST an die Domäne "X" zu senden.
- Wenn der Server, der den POST empfängt, tatsächlich überhaupt keine Formularwerte sieht. Ich sage dies, weil die Mehrheit der Online-Diskussionstester Tester aufzeichnet, die sagten, der Server habe den Beitrag erhalten, aber die Formularwerte waren alle leer / entfernt.
- In welchem offiziellen Dokument (dh RFC) wird das erwartete Verhalten erläutert (unabhängig davon, was die Browser derzeit implementiert haben).
Im Übrigen macht es etwas offensichtlicher, warum Anti-Fälschungs-Token notwendig sind, wenn derselbe Ursprung keine Auswirkungen auf Form-POSTs hat. 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 einen illegalen POST zu erstellen, der dasselbe Token enthält. Bemerkungen?
Antworten:
Die gleiche Ursprungsrichtlinie gilt nur für browser-seitige Programmiersprachen. Wenn Sie also versuchen, mit JavaScript auf einem anderen Server als dem Ursprungsserver zu posten, kommt dieselbe Ursprungsrichtlinie ins Spiel, aber wenn Sie direkt aus dem Formular posten, dh die Aktion zeigt auf einen anderen Server wie:
Wenn beim Versenden des Formulars kein Javascript erforderlich ist, gilt dieselbe Ursprungsrichtlinie nicht.
Weitere Informationen finden Sie in Wikipedia
quelle
Es ist möglich, eine beliebige GET- oder POST-Anforderung zu erstellen und an jeden Server zu senden, auf den ein Opferbrowser zugreifen kann. Dies schließt Geräte in Ihrem lokalen Netzwerk ein, z. B. Drucker und Router.
Es gibt viele Möglichkeiten, einen CSRF-Exploit zu erstellen. Ein einfacher POST-basierter CSRF-Angriff kann mithilfe der
.submit()
Methode gesendet werden . Komplexere Angriffe, wie z. B. standortübergreifende CSRF-Angriffe zum Hochladen von Dateien, nutzen die CORS-Verwendung des Verhaltens xhr.withCredentals aus .CSRF verstößt nicht gegen die Same-Origin-Richtlinie für JavaScrip t, da in der SOP JavaScript die Antwort des Servers auf eine Clientanforderung liest . 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 Administratorbenutzers 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 .
quelle
Dieselbe Ursprungsrichtlinie hat nichts mit dem Senden einer Anfrage an eine andere URL (anderes Protokoll oder Domäne oder Port) zu tun.
Es geht darum, den Zugriff auf (Lesen) von Antwortdaten von einer anderen URL zu beschränken. So kann JavaScript-Code innerhalb einer Seite an eine beliebige Domain gesendet oder Formulare innerhalb 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-Anforderungen jedoch ineffizient macht, ist, dass diesen Anforderungen Antiforgery-Token fehlen und daher von der anderen URL ignoriert werden. Wenn das JavaScript versucht, diese Sicherheitstoken abzurufen, indem es eine AJAX-Anfrage an die URL des Opfers sendet, wird der Zugriff auf diese Daten durch die Same Origin-Richtlinie verhindert.
Ein gutes Beispiel: hier
Und eine gute Dokumentation von Mozilla: hier
quelle