Die GET-Anforderung ist geringfügig weniger sicher als die POST-Anforderung. Keiner bietet echte "Sicherheit" für sich; Durch die Verwendung von POST-Anfragen wird Ihre Website nicht auf magische Weise spürbar vor böswilligen Angriffen geschützt. Die Verwendung von GET-Anforderungen kann jedoch eine ansonsten sichere Anwendung unsicher machen.
Das Mantra, dass Sie "keine GET-Anforderungen verwenden dürfen, um Änderungen vorzunehmen", ist immer noch sehr gültig, aber dies hat wenig mit böswillig zu tun Verhalten . Anmeldeformulare reagieren am empfindlichsten darauf, mit dem falschen Anforderungstyp gesendet zu werden.
Suche nach Spinnen und Webbeschleunigern
Dies ist der eigentliche Grund, warum Sie POST-Anforderungen zum Ändern von Daten verwenden sollten. Suchspinnen folgen jedem Link auf Ihrer Website, senden jedoch keine zufälligen Formulare, die sie finden.
Webbeschleuniger sind schlechter als Suchspinnen, da sie auf dem Computer des Clients ausgeführt werden und alle Links im Kontext des angemeldeten Benutzers "anklicken" . Daher befolgt eine Anwendung, die eine GET-Anforderung zum Löschen von Inhalten verwendet, auch wenn ein Administrator erforderlich ist, gerne die Anweisungen des (nicht böswilligen!) Webbeschleunigers und löscht alles, was sie sieht .
Verwirrter stellvertretender Angriff
Ein verwirrter Stellvertreterangriff (wobei der Stellvertreter der Browser ist) ist möglich, unabhängig davon, ob Sie eine GET- oder eine POST-Anforderung verwenden .
Auf von Angreifern kontrollierten Websites können GET und POST ohne Benutzerinteraktion gleichermaßen einfach übermittelt werden .
Das einzige Szenario, in dem POST etwas weniger anfällig ist, besteht darin, dass viele Websites, die nicht unter der Kontrolle des Angreifers stehen (z. B. ein Forum eines Drittanbieters), das Einbetten beliebiger Bilder ermöglichen (wodurch der Angreifer eine beliebige GET-Anforderung einfügen kann), aber alle verhindern Möglichkeiten zum Injizieren einer willkürlichen POST-Anforderung, ob automatisch oder manuell.
Man könnte argumentieren, dass Webbeschleuniger ein Beispiel für einen verwirrten Angriff der Stellvertreter sind, aber das ist nur eine Frage der Definition. Wenn überhaupt, hat ein böswilliger Angreifer keine Kontrolle darüber, so dass es kaum ein Angriff ist , selbst wenn der Stellvertreter es ist verwirrt.
Proxy-Protokolle
Proxyserver protokollieren wahrscheinlich GET-URLs vollständig, ohne die Abfragezeichenfolge zu entfernen. POST-Anforderungsparameter werden normalerweise nicht protokolliert. In beiden Fällen ist es unwahrscheinlich, dass Cookies protokolliert werden. (Beispiel)
Dies ist ein sehr schwaches Argument für POST. Erstens kann unverschlüsselter Verkehr vollständig protokolliert werden. Ein böswilliger Proxy hat bereits alles, was er braucht. Zweitens sind die Anforderungsparameter für einen Angreifer von begrenztem Nutzen: Was sie wirklich benötigen, sind die Cookies. Wenn sie also nur Proxy-Protokolle haben, ist es unwahrscheinlich, dass sie entweder eine GET- oder eine POST-URL angreifen können.
Es gibt eine Ausnahme für Anmeldeanfragen: Diese enthalten in der Regel das Kennwort des Benutzers. Wenn Sie dies im Proxy-Protokoll speichern, wird ein Angriffsvektor geöffnet, der im Fall von POST nicht vorhanden ist. Die Anmeldung über einfaches HTTP ist jedoch ohnehin von Natur aus unsicher.
Proxy-Cache
Caching-Proxys behalten möglicherweise GET-Antworten bei, jedoch keine POST-Antworten. Allerdings können GET-Antworten mit weniger Aufwand nicht zwischengespeichert werden, als wenn die URL in einen POST-Handler konvertiert wird.
HTTP "Referer"
Wenn der Benutzer von der Seite, die als Antwort auf eine GET-Anfrage bereitgestellt wird, zu einer Website eines Drittanbieters navigiert, werden auf dieser Website eines Drittanbieters alle Parameter der GET-Anforderung angezeigt.
Gehört zur Kategorie "Anforderungsparameter an Dritte weitergeben", deren Schweregrad davon abhängt, was in diesen Parametern vorhanden ist. POST-Anfragen sind natürlich immun dagegen. Um jedoch die GET-Anfrage auszunutzen, müsste ein Hacker einen Link zu seiner eigenen Website in die Antwort des Servers einfügen.
Browserverlauf
Dies ist dem Argument "Proxy-Protokolle" sehr ähnlich: GET-Anforderungen werden zusammen mit ihren Parametern im Browserverlauf gespeichert. Der Angreifer kann diese leicht erhalten, wenn er physischen Zugriff auf die Maschine hat.
Browser-Aktualisierungsaktion
Der Browser wiederholt eine GET-Anfrage, sobald der Benutzer auf "Aktualisieren" klickt. Dies kann beim Wiederherstellen von Registerkarten nach dem Herunterfahren der Fall sein. Jede Aktion (z. B. eine Zahlung) wird daher ohne Vorwarnung wiederholt.
Der Browser wiederholt eine POST-Anforderung nicht ohne Warnung.
Dies ist ein guter Grund, nur POST-Anforderungen zum Ändern von Daten zu verwenden, hat jedoch nichts mit böswilligem Verhalten und damit mit Sicherheit zu tun.
Also was soll ich tun?
- Verwenden Sie nur POST-Anforderungen, um Daten zu ändern, hauptsächlich aus nicht sicherheitsrelevanten Gründen.
- Verwenden Sie nur POST-Anforderungen für Anmeldeformulare. Andernfalls werden Angriffsvektoren eingeführt.
- Wenn Ihre Site vertrauliche Vorgänge ausführt, benötigen Sie wirklich jemanden, der weiß, was er tut, da dies nicht in einer einzigen Antwort behandelt werden kann. Sie müssen HTTPS, HSTS, CSP, SQL-Injection, Script Injection (XSS) , CSRF und eine Vielzahl anderer Dinge verwenden, die für Ihre Plattform spezifisch sein können (z. B. die Sicherheitsanfälligkeit bezüglich Massenzuweisung in verschiedenen Frameworks: ASP.NET MVC , Ruby on Rails usw.). Es gibt keine einzige Sache, die den Unterschied zwischen "sicher" (nicht ausnutzbar) und "nicht sicher" ausmacht.
Über HTTPS werden POST-Daten verschlüsselt. Könnten URLs jedoch von einem Drittanbieter abgehört werden?
Nein, sie können nicht beschnuppert werden. Die URLs werden jedoch im Browserverlauf gespeichert.
Wäre es fair zu sagen, dass die beste Vorgehensweise darin besteht, zu vermeiden, dass vertrauliche Daten vollständig in den POST oder GET gestellt werden, und stattdessen serverseitigen Code zu verwenden, um vertrauliche Informationen zu verarbeiten?
Kommt darauf an, wie empfindlich es ist oder genauer gesagt, auf welche Weise. Offensichtlich wird der Kunde es sehen. Jeder, der physischen Zugriff auf den Computer des Clients hat, wird ihn sehen. Der Kunde kann es fälschen, wenn er es an Sie zurücksendet. Wenn dies wichtig ist, behalten Sie die vertraulichen Daten auf dem Server und lassen Sie sie nicht verlassen.