Die Bedenken Unterschied Umleitung POST
, PUT
und DELETE
Anfragen und was die Erwartungen des Servers sind für den User - Agent - Verhalten ( RFC 2616
):
Hinweis: RFC 1945 und RFC 2068 geben an, dass der Client die Methode für die umgeleitete Anforderung nicht ändern darf. Die meisten vorhandenen Benutzeragentenimplementierungen behandeln 302 jedoch so, als wäre es eine 303-Antwort, und führen unabhängig von der ursprünglichen Anforderungsmethode ein GET für den Feldwert "Standort" durch. Die Statuscodes 303 und 307 wurden für Server hinzugefügt, die eindeutig klarstellen möchten, welche Art von Reaktion vom Client erwartet wird.
Lesen Sie auch den Wikipedia-Artikel über die 30-fachen Umleitungscodes .
307 kam zustande, weil Benutzeragenten als De-facto- Verhalten POST-Anforderungen, die eine 302-Antwort empfangen, entgegennahmen und eine GET-Anforderung an den Standortantwort-Header sendeten.
Das ist das falsche Verhalten - nur ein 303 sollte bewirken, dass aus einem POST ein GET wird. Benutzeragenten sollten sich beim Anfordern der neuen URL an die POST-Methode halten (aber nicht), wenn die ursprüngliche POST-Anforderung eine 302 zurückgegeben hat.
307 wurde eingeführt, damit Server dem Benutzeragenten klar machen können, dass der Client keine Methodenänderung vornehmen sollte , wenn er dem Location-Antwortheader folgt.
quelle
302
falsch. Chrome 30, IE10. Es wurde die de facto falsche Umsetzung; Dies kann nicht geändert werden, da auf so vielen Websites fälschlicherweise das Problem 302 ausgegeben wird. Tatsächlich gibt ASP.net MVC 302 fälschlicherweise aus, abhängig von der Tatsache, dass Browser damit falsch umgehen.303
es auch307
in der HTTP 1.1-Spezifikation eingeführt wurde und somit die Abwärtskompatibilität mit HTTP 1.0-Benutzeragenten ermöglicht. Die eigentliche Frage ist natürlich, ob wir jetzt überhaupt noch mit HTTP 1.0-Benutzeragenten umgehen sollen.Response.RedirectSeeOther
), und wenn der Kunde nicht 1.1 (zB istGET /foo.html
,GET /foo.html HTTP/1.0
) dann das Erbe ausgeben302
.Ein gutes Beispiel für die
307 Internal Redirect
Aktion ist, wenn Google Chrome auf einen HTTP-Aufruf einer Domain stößt, von der bekannt ist, dass sie strenge Transportsicherheit erfordert.Der Browser leitet nahtlos um und verwendet dieselbe Methode wie der ursprüngliche Aufruf.
quelle
Anwendungsbeispiel: URL verschoben von
/register-form.html
nachsignup-form.html
.Die Methode wird gemäß RFC 7231 in GET geändert: "Aus historischen Gründen kann ein Benutzeragent die Anforderungsmethode für die nachfolgende Anforderung von POST in GET ändern."
Anwendungsbeispiel: Wenn der Browser POST an gesendet hat
/register.php
, laden Sie jetzt (GET)/success.html
.Anwendungsbeispiel: Wenn der Browser einen POST an gesendet hat
/register.php
, wird er angewiesen, den POST um zu wiederholen/signup.php
.RFC 7231 (ab 2014) ist sehr gut lesbar und nicht übermäßig ausführlich. Wenn Sie die genaue Antwort wissen möchten, wird eine Lektüre empfohlen. Einige andere Antworten verwenden RFC 2616 aus dem Jahr 1999, aber nichts hat sich geändert.
RFC 7238 gibt den 308-Status an. Es gilt als experimentell, wurde aber bereits 2016 von allen gängigen Browsern unterstützt .
quelle
ERWARTET für 302: Die Umleitung verwendet dieselbe Anforderungsmethode POST für NEW_URL
ACTUAL für 302, 303: Ändert die Anforderungsmethode für Änderungen von POST nach GET auf NEW_URL um
ACTUAL für 307: Die Umleitung verwendet dieselbe Anforderungsmethode POST für NEW_URL
quelle
302 ist eine temporäre Umleitung, die vom Server generiert wird, während 307 eine interne Umleitungsantwort ist, die vom Browser generiert wird. Interne Umleitung bedeutet, dass die Umleitung automatisch vom Browser intern durchgeführt wird. Grundsätzlich ändert der Browser die eingegebene URL von http zu https, um die Anforderung selbst abzurufen, bevor die Anforderung gestellt wird, sodass die Anforderung einer ungesicherten Verbindung zum Internet niemals erfolgt. Ob der Browser die URL in https ändert oder nicht, hängt von der mit dem Browser vorinstallierten hsts-Preload-Liste ab. Sie können der Liste auch jede Site hinzufügen, die https unterstützt, indem Sie die Domain in die hsts-Preload-Liste Ihres eigenen Browsers unter chrome: //net-internals/#hsts eingeben. Weitere Domain-Domains können von ihren Eigentümern hinzugefügt werden Zum Vorladen der Liste füllen Sie das Formular unter https://hstspreload.org/ aus.Damit es in Browsern für jeden Benutzer vorinstalliert ist, obwohl ich erwähne, dass Sie dies auch besonders für sich selbst tun können.
Lassen Sie mich anhand eines Beispiels erklären:
Ich habe eine Get-Anfrage an http://www.pentesteracademy.com gestellt , die nur https unterstützt, und ich habe diese Domain nicht in meiner hsts-Preload-Liste in meinem Browser, da sich der Websitebesitzer nicht dafür registriert hat mit vorinstallierten hsts Preload-Liste zu kommen. Die GET-Anforderung für eine unsichere Version der Site wird zur sicheren Version umgeleitet (siehe http-Header mit dem Namen location als Antwort auf das obige Bild). Jetzt füge ich die Site meiner eigenen Browser-Preload-Liste hinzu, indem ich ihre Domain im Formular Add hsts domain unter chrome: // net-internals / # hsts hinzufüge, wodurch meine persönliche Preload-Liste in meinem Chrome-Browser geändert wird. Wählen Sie unbedingt include-Subdomains für STS Option dort. Lassen Sie uns jetzt die Anfrage und Antwort für dieselbe Website sehen, nachdem Sie sie zur hsts-Preload-Liste hinzugefügt haben.
Sie können die interne Umleitung 307 dort in Antwortheadern sehen, tatsächlich wird diese Antwort von Ihrem Browser und nicht vom Server generiert.
Die HSTS-Preload-Liste kann auch dazu beitragen, dass Benutzer die unsichere Version der Site nicht erreichen, da 302-Weiterleitungen anfällig für Mitm-Angriffe sind.
Ich hoffe, ich habe Ihnen etwas geholfen, mehr über Weiterleitungen zu verstehen.
quelle
Ursprünglich gab es nur
302
Die Idee ist, dass:
GET
an einem Ort eine machen würden, würden Sie Ihre wiederholenGET
auf die neue URLPOST
an einem Ort eine machen würden, würden Sie Ihre wiederholenPOST
auf die neue URLPUT
an einem Ort eine machen würden, würden Sie Ihre wiederholenPUT
auf die neue URLDELETE
an einem Ort eine machen würden, würden Sie Ihre wiederholenDELETE
auf die neue URLLeider hat jeder Browser es falsch gemacht. Wenn ein immer
302
, würden sie wechseln immerGET
an der neuen URL, anstatt die Anforderung mit dem erneuten Versuch gleichen Verb ( zB ,POST
):Es wurde de facto falsch.
Alle Browser haben sich
302
geirrt. Also303
und307
wurden geschaffen.| Antwort | Was sollten Browser tun? Was Browser eigentlich tun | | ------------------------ | ------------------------ --- | --------------------------- | | 302 Gefunden | Anfrage mit neuer URL wiederholen | GET mit neuer URL | | 303 Siehe Andere | GET mit neuer URL | GET mit neuer URL | | 307 Temporäre Weiterleitung | Anfrage mit neuer URL wiederholen | Anfrage mit neuer URL wiederholen |
In Diagrammform
Die 5 verschiedenen Arten von Weiterleitungen:
Alternative:
quelle
Für Serveradministratoren kann es außerdem wichtig sein, zu beachten, dass Browser dem Benutzer möglicherweise eine Eingabeaufforderung anzeigen, wenn Sie die 307-Umleitung verwenden.
Zum Beispiel * würden Firefox und Opera den Benutzer um Erlaubnis zur Weiterleitung bitten, während Chrome, IE und Safari die Umleitung transparent durchführen würden.
* gemäß Bulletproof SSL und TLS (Seite 192).
quelle
In einigen Anwendungsfällen können 307 Weiterleitungen von einem Angreifer missbraucht werden, um die Anmeldeinformationen des Opfers zu erfahren.
Weitere Informationen finden Sie in Abschnitt 3.1 von A Comprehensive formaler Sicherheitsanalyse von OAuth 2.0 .
Die Autoren des obigen Papiers schlagen Folgendes vor:
quelle