Was sind die Unterschiede beim Vergleich eines HTTP-GET mit einem HTTP-POST aus Sicherheitsgründen? Ist eine der Entscheidungen von Natur aus sicherer als die andere? Wenn ja warum?
Mir ist klar, dass POST keine Informationen in der URL verfügbar macht, aber gibt es einen wirklichen Wert darin oder ist es nur Sicherheit durch Dunkelheit? Gibt es jemals einen Grund, warum ich POST bevorzugen sollte, wenn Sicherheit ein Problem ist?
Bearbeiten:
Über HTTPS werden POST-Daten verschlüsselt. Könnten URLs jedoch von einem Drittanbieter abgehört werden? Außerdem beschäftige ich mich mit JSP; Wenn Sie JSP oder ein ähnliches Framework verwenden, ist es fair zu sagen, dass die beste Vorgehensweise darin besteht, zu vermeiden, dass vertrauliche Daten vollständig in POST oder GET platziert werden, und stattdessen serverseitigen Code zu verwenden, um vertrauliche Informationen zu verarbeiten.
Antworten:
In Bezug auf die Sicherheit sind sie von Natur aus gleich. Zwar macht POST keine Informationen über die URL verfügbar, es werden jedoch genauso viele Informationen wie bei einem GET in der tatsächlichen Netzwerkkommunikation zwischen Client und Server verfügbar gemacht. Wenn Sie vertrauliche Informationen weitergeben müssen, besteht Ihre erste Verteidigungslinie darin, diese über Secure HTTP weiterzugeben.
GET- oder Abfragezeichenfolgenbeiträge eignen sich hervorragend für Informationen, die entweder zum Lesezeichen eines bestimmten Elements oder zur Unterstützung bei der Suchmaschinenoptimierung und Indizierung von Elementen erforderlich sind.
POST eignet sich für Standardformulare, mit denen einmalige Daten übermittelt werden. Ich würde GET nicht zum Posten tatsächlicher Formulare verwenden, es sei denn, Sie möchten dem Benutzer erlauben, die Abfrage in einem Lesezeichen oder in einem ähnlichen Sinne zu speichern.
quelle
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?
Nein, sie können nicht beschnuppert werden. Die URLs werden jedoch im Browserverlauf gespeichert.
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.
quelle
<body onload="document.getElementById('a').submit()"><form id="a" action="http://example.com/delete.php" action="post"><input type="hidden" name="id" value="12"></form>
ist nicht wirklich schwer, irgendwo automatisch einen Beitrag einzureichen, indem man auf einen Link klickt (der diesen HTML-Sie haben keine größere Sicherheit, da die Variablen über HTTP POST gesendet werden als bei Variablen, die über HTTP GET gesendet werden.
HTTP / 1.1 bietet uns eine Reihe von Methoden zum Senden einer Anfrage :
Nehmen wir an, Sie haben das folgende HTML-Dokument mit GET:
Was fragt Ihr Browser? Es fragt dies:
Stellen wir uns nun vor, wir hätten diese Anforderungsmethode in einen POST geändert:
BEIDE dieser HTTP-Anforderungen sind:
Viele Browser unterstützen keine anderen HTTP-Methoden als POST / GET.
Viele Browser Seitenadresse gespeichert. Dies bedeutet jedoch nicht, dass Sie eines dieser anderen Probleme ignorieren können.
Um genau zu sein:
Dies ist richtig, da die Software, mit der Sie HTTP sprechen, dazu neigt, die Anforderungsvariablen mit einer Methode zu speichern, aber nicht mit einer anderen Methode verhindert, dass jemand Ihren Browserverlauf oder einen anderen naiven Angriff eines 10-Jährigen betrachtet, der glaubt, h4x0r1ng zu verstehen oder Skripte, die Ihren Verlaufsspeicher überprüfen. Wenn Sie ein Skript haben, mit dem Sie Ihren Verlaufsspeicher überprüfen können, können Sie auch ein Skript verwenden, das Ihren Netzwerkverkehr überprüft. Diese gesamte Sicherheit durch Dunkelheit bietet also nur Skriptkindern und eifersüchtigen Freundinnen Dunkelheit.
So funktioniert SSL Erinnerst du dich an die beiden Anfragen, die ich oben gesendet habe? So sehen sie in SSL aus: (Ich habe die Seite in https://encrypted.google.com/ geändert, da example.com nicht auf SSL reagiert.)
POST über SSL
GET über SSL
(Hinweis: Ich habe das HEX in ASCII konvertiert, einige davon sollten offensichtlich nicht anzeigbar sein.)
Die gesamte HTTP-Konversation ist verschlüsselt. Der einzige sichtbare Teil der Kommunikation befindet sich auf der TCP / IP-Schicht (dh der IP-Adresse und den Verbindungsportinformationen).
Lassen Sie mich hier eine große kühne Aussage machen. Ihre Website bietet keine größere Sicherheit für eine HTTP-Methode als für eine andere. Hacker und Neulinge auf der ganzen Welt wissen genau, wie das zu tun ist, was ich gerade hier demonstriert habe. Wenn Sie Sicherheit wünschen, verwenden Sie SSL. Browser neigen dazu, den Verlauf zu speichern. Es wird von RFC2616 9.1.1 empfohlen, GET NICHT zum Ausführen einer Aktion zu verwenden, aber zu glauben, dass POST Sicherheit bietet, ist völlig falsch.
Das einzige, was POST ist eine Sicherheitsmaßnahme? Schutz vor Ihrem eifersüchtigen Ex, der Ihren Browserverlauf durchblättert. Das ist es. Der Rest der Welt ist in Ihrem Konto angemeldet und lacht über Sie.
Um weiter zu demonstrieren, warum POST nicht sicher ist, verwendet Facebook überall POST-Anfragen. Wie kann also Software wie FireSheep existieren?
Beachten Sie, dass Sie möglicherweise mit CSRF angegriffen werden, auch wenn Sie HTTPS verwenden und Ihre Site keine XSS- Schwachstellen enthält. Kurz gesagt, in diesem Angriffsszenario wird davon ausgegangen, dass das Opfer (der Benutzer Ihrer Website oder Ihres Dienstes) bereits angemeldet ist und über ein ordnungsgemäßes Cookie verfügt. Anschließend wird der Browser des Opfers aufgefordert, etwas mit Ihrer (angeblich sicheren) Website zu tun. Wenn Sie keinen Schutz gegen CSRF haben, kann der Angreifer weiterhin Aktionen mit den Anmeldeinformationen des Opfers ausführen. Der Angreifer kann die Serverantwort nicht sehen, da sie an den Browser des Opfers übertragen wird, aber der Schaden ist normalerweise bereits zu diesem Zeitpunkt angerichtet.
quelle
+1
.Es gibt keine zusätzliche Sicherheit.
Post-Daten werden nicht in den Verlaufs- und / oder Protokolldateien angezeigt. Wenn die Daten jedoch sicher aufbewahrt werden sollen, benötigen Sie SSL.
Andernfalls kann jeder, der an der Leitung schnüffelt, Ihre Daten trotzdem lesen.
quelle
Auch wenn sich für Anmeldeformulare oder andere Formulare mit relativ vertraulichen Informationen
POST
kein wirklicher Sicherheitsvorteil ergibtGET
, stellen Sie sicher, dass Sie Folgendes verwendenPOST
:POST
werden nicht im Benutzerverlauf gespeichert.GET
werden sie im Verlauf und in der URL-Leiste angezeigt).Auch
GET
hat eine theoretische Grenze von Daten.POST
nicht.Verwenden Sie für wirklich vertrauliche Informationen unbedingt
SSL
(HTTPS
)quelle
Keiner von GET und POST ist von Natur aus "sicherer" als der andere, genauso wie keiner von Fax und Telefon "sicherer" als der andere ist. Die verschiedenen HTTP-Methoden werden bereitgestellt, damit Sie diejenige auswählen können, die für das Problem, das Sie lösen möchten, am besten geeignet ist. GET ist besser geeignet für idempotente Abfragen, während POST für "Aktions" -Abfragen besser geeignet ist. Sie können sich jedoch mit jeder dieser Abfragen genauso leicht in den Fuß schießen, wenn Sie die Sicherheitsarchitektur für die von Ihnen verwaltete Anwendung nicht verstehen.
Es ist wahrscheinlich am besten, wenn Sie Kapitel 9: Methodendefinitionen des HTTP / 1.1-RFC lesen , um eine allgemeine Vorstellung davon zu erhalten, was GET und POST ursprünglich nicht bedeuten sollten.
quelle
Der Unterschied zwischen GET und POST sollte nicht in Bezug auf die Sicherheit gesehen werden, sondern in Bezug auf ihre Absichten gegenüber dem Server. GET sollte niemals Daten auf dem Server ändern - zumindest nicht in Protokollen -, aber POST kann neue Ressourcen erstellen.
Nette Proxys werden POST-Daten nicht zwischenspeichern, aber sie können GET-Daten von der URL zwischenspeichern, sodass Sie sagen können, dass POST sicherer sein soll. POST-Daten stehen jedoch weiterhin Proxys zur Verfügung, die nicht gut funktionieren.
Wie in vielen Antworten erwähnt, ist die einzig sichere Wette SSL.
Stellen Sie jedoch sicher, dass die GET-Methoden keine Änderungen festschreiben, z. B. das Löschen von Datenbankzeilen usw.
quelle
Meine übliche Methode zur Auswahl ist wie folgt:
quelle
Dies ist nicht sicherheitsrelevant, aber ... Browser speichern keine POST-Anforderungen zwischen .
quelle
Keiner von beiden verleiht einer Anfrage auf magische Weise Sicherheit, GET impliziert jedoch einige Nebenwirkungen, die im Allgemeinen verhindern, dass sie sicher ist.
GET-URLs werden im Browserverlauf und in den Webserver-Protokollen angezeigt. Aus diesem Grund sollten sie niemals für Anmeldeformulare und Kreditkartennummern verwendet werden.
Das bloße POSTEN dieser Daten macht sie jedoch auch nicht sicher. Dafür möchten Sie SSL. Sowohl GET als auch POST senden Daten im Klartext über das Kabel, wenn sie über HTTP verwendet werden.
Es gibt auch andere gute Gründe, Daten zu POSTEN - wie die Möglichkeit, unbegrenzte Datenmengen zu übermitteln oder Parameter vor Gelegenheitsbenutzern zu verbergen.
Der Nachteil ist, dass Benutzer die Ergebnisse einer über POST gesendeten Abfrage nicht mit einem Lesezeichen versehen können. Dafür brauchen Sie GET.
quelle
Betrachten Sie diese Situation: Eine schlampige API akzeptiert GET-Anforderungen wie:
Wenn Sie in einigen Einstellungen diese URL anfordern und ein Fehler / eine Warnung bezüglich der Anforderung auftritt, wird diese gesamte Zeile in der Protokolldatei protokolliert. Schlimmer noch: Wenn Sie vergessen, Fehlermeldungen auf dem Produktionsserver zu deaktivieren, werden diese Informationen nur im Browser angezeigt! Jetzt haben Sie gerade Ihren API-Schlüssel an alle weitergegeben.
Leider gibt es echte APIs, die auf diese Weise funktionieren.
Ich möchte nicht, dass vertrauliche Informationen in den Protokollen enthalten sind oder im Browser angezeigt werden. POST und GET sind nicht dasselbe. Verwenden Sie sie gegebenenfalls.
quelle
SICHERHEIT als Sicherheit von Daten IN TRANSIT: kein Unterschied zwischen POST und GET.
SICHERHEIT als Sicherheit von Daten AUF DEM COMPUTER: POST ist sicherer (kein URL-Verlauf)
quelle
Der Begriff Sicherheit ist bedeutungslos, es sei denn, Sie definieren, gegen was Sie sicher sein möchten.
Wenn Sie gegen gespeicherten Browserverlauf, einige Arten der Protokollierung und Personen, die Ihre URLs anzeigen, sicher sein möchten, ist POST sicherer.
Wenn Sie sicher sein möchten, dass jemand an Ihrer Netzwerkaktivität schnüffelt, gibt es keinen Unterschied.
quelle
Viele Leute nehmen eine Konvention an (von Ross angedeutet), dass GET-Anforderungen nur Daten abrufen und keine Daten auf dem Server ändern, und POST-Anforderungen werden für alle Datenänderungen verwendet. Während man nicht mehr von Natur aus sicherer als die anderen ist, wenn Sie tun , diese Konvention folgen, können Sie übergreifende Sicherheitslogik anwenden (zB nur Personen mit Konten können Daten ändern, so unauthenticated Beiträge werden abgelehnt).
quelle
Es ist schwieriger, eine POST-Anforderung zu ändern (dies erfordert mehr Aufwand als das Bearbeiten der Abfragezeichenfolge). Bearbeiten: Mit anderen Worten, es ist nur Sicherheit durch Dunkelheit, und kaum das.
quelle
Ich werde nicht alle anderen Antworten wiederholen, aber es gibt einen Aspekt, den ich noch nicht erwähnt habe - es ist die Geschichte des Verschwindens von Daten. Ich weiß nicht, wo ich es finden kann, aber ...
Im Grunde handelt es sich um eine Webanwendung, die auf mysteriöse Weise alle paar Nächte alle Daten verloren hat und niemand wusste warum. Eine spätere Überprüfung der Protokolle ergab, dass die Website von Google oder einer anderen beliebigen Spinne gefunden wurde, die alle auf der Website gefundenen Links - einschließlich "Diesen Eintrag löschen" und "Sind Sie sicher?" Links.
Eigentlich - ein Teil davon wurde erwähnt. Dies ist die Geschichte hinter "Ändern Sie keine Daten in GET, sondern nur in POST". Crawler werden GET gerne folgen, niemals POST. Selbst robots.txt hilft nicht gegen schlecht benommene Crawler.
quelle
Sie sollten sich auch darüber im Klaren sein, dass, wenn Ihre Websites Links zu anderen externen Websites enthalten, die Sie nicht mit GET steuern, diese Daten in den Header des Empfängers auf den externen Websites eingefügt werden, wenn diese auf die Links auf Ihrer Website klicken. Das Übertragen von Anmeldedaten über GET-Methoden ist daher IMMER ein großes Problem. Da dies möglicherweise Anmeldeinformationen für den einfachen Zugriff verfügbar macht, indem Sie nur die Protokolle überprüfen oder in Google Analytics (oder ähnlichem) suchen.
quelle
RFC7231:
"URIs sollen gemeinsam genutzt und nicht gesichert werden, selbst wenn sie sichere Ressourcen identifizieren. URIs werden häufig auf Displays angezeigt, beim Drucken einer Seite zu Vorlagen hinzugefügt und in einer Vielzahl ungeschützter Lesezeichenlisten gespeichert. Es ist daher nicht ratsam, sie einzuschließen Informationen innerhalb einer URI, die sensibel, persönlich identifizierbar oder offen zu legen sind.
Autoren von Diensten sollten GET-basierte Formulare für die Übermittlung sensibler Daten vermeiden, da diese Daten in das Anforderungsziel gestellt werden. Viele vorhandene Server, Proxys und Benutzeragenten protokollieren oder zeigen das Anforderungsziel an Stellen an, an denen es für Dritte sichtbar sein könnte. Solche Dienste sollten stattdessen die POST-basierte Formularübermittlung verwenden. "
Dieser RFC besagt eindeutig, dass sensible Daten nicht mit GET übermittelt werden sollten. Aufgrund dieser Bemerkung behandeln einige Implementierer Daten, die aus dem Abfrageteil einer GET-Anforderung stammen, möglicherweise nicht mit der gleichen Sorgfalt. Ich arbeite selbst an einem Protokoll, das die Integrität der Daten gewährleistet. Nach dieser Spezifikation sollte ich die Integrität der GET-Daten nicht garantieren müssen (was ich tun werde, weil niemand diese Spezifikationen einhält).
quelle
Wie bereits einige Leute gesagt haben, bringt HTTPS Sicherheit.
POST ist jedoch etwas sicherer als GET, da GET im Verlauf gespeichert werden kann.
Leider ist die Wahl von POST oder GET manchmal nicht Sache des Entwicklers. Zum Beispiel wird ein Hyperlink immer per GET gesendet (es sei denn, er wird mit Javascript in ein Post-Formular umgewandelt).
quelle
GET ist für jeden sichtbar (auch für den, der sich gerade auf Ihrer Schulter befindet) und wird im Cache gespeichert. Daher ist die Verwendung von Post weniger sicher. Übrigens ist Post ohne Kryptografieroutine nicht sicher. Für ein wenig Sicherheit müssen Sie SSL verwenden ( https)
quelle
Ein Grund, warum POST aus Sicherheitsgründen schlechter ist, besteht darin, dass GET standardmäßig mit Parametern und allen Daten von Ihrem Webserver fast universell protokolliert wird.
POST ist das Gegenteil , es wird fast überall nicht protokolliert , was zu sehr schwer zu erkennenden Angreiferaktivitäten führt.
Ich kaufe nicht das Argument „es ist zu groß“, die kein Grund, nicht melden Sie sich etwas , zumindest 1 KB, würde einen langen Weg für die Menschen Angreifer arbeiten weg an einem schwachen Eingangspunkt zu identifizieren , bis es den Pop, dann POST tut Ein doppelter Dis-Service, bei dem jede HTTP-basierte Hintertür unbegrenzt Datenmengen unbeaufsichtigt weitergeben kann.
quelle
Der Unterschied besteht darin, dass GET Daten offen und POST ausgeblendet sendet (im http-Header).
Get ist also besser für nicht sichere Daten wie Abfragezeichenfolgen in Google. Auth-Daten dürfen niemals über GET gesendet werden - verwenden Sie also POST hier. Natürlich ist das ganze Thema etwas komplizierter. Wenn Sie mehr lesen möchten, lesen Sie diesen Artikel .
quelle
Kürzlich wurde ein Angriff veröffentlicht, der es einem Mann in der Mitte ermöglicht, den Anforderungskörper komprimierter HTTPS-Anforderungen anzuzeigen. Da Anforderungsheader und URL nicht durch HTTP komprimiert werden, sind GET-Anforderungen besser gegen diesen bestimmten Angriff geschützt.
Es gibt Modi, in denen GET-Anforderungen ebenfalls anfällig sind. SPDY komprimiert Anforderungsheader. TLS bietet auch eine optionale (selten verwendete) Komprimierung. In diesen Szenarien ist der Angriff leichter zu verhindern (Browser-Anbieter haben bereits Korrekturen bereitgestellt). Die Komprimierung auf HTTP-Ebene ist eine grundlegendere Funktion. Es ist unwahrscheinlich, dass Anbieter sie deaktivieren.
Es ist nur ein Beispiel, das ein Szenario zeigt, in dem GET sicherer als POST ist, aber ich denke nicht, dass es eine gute Idee wäre, aus diesem Angriffsgrund GET anstelle von POST zu wählen. Der Angriff ist ziemlich raffiniert und erfordert nicht triviale Voraussetzungen (Angreifer müssen in der Lage sein, einen Teil des Anforderungsinhalts zu kontrollieren). Es ist besser, die HTTP-Komprimierung in Szenarien zu deaktivieren, in denen der Angriff schädlich wäre.
quelle
Haftungsausschluss: Die folgenden Punkte gelten nur für API-Aufrufe und nicht für die Website-URLs.
Sicherheit über das Netzwerk : Sie müssen HTTPS verwenden. GET und POST sind in diesem Fall gleichermaßen sicher.
Browserverlauf : Für Front-End-Anwendungen wie Angular JS, React JS usw. sind API-Aufrufe AJAX-Aufrufe des Frontends. Diese werden nicht Teil des Browserverlaufs. Daher sind POST und GET gleichermaßen sicher.
Serverseitige Protokolle : Mit dem Schreibsatz-Format für Datenmaskierung und Zugriffsprotokolle können alle oder nur vertrauliche Daten vor der Anforderungs-URL ausgeblendet werden.
Datensichtbarkeit in der Browserkonsole: Für jemanden mit böswilliger Absicht ist es fast das gleiche Bestreben, POST-Daten genauso anzuzeigen wie GET.
Daher ist die GET-API mit den richtigen Protokollierungsmethoden genauso sicher wie die POST-API. Wenn Sie POST überall folgen, werden schlechte API-Definitionen erzwungen und sollten vermieden werden.
quelle
Post ist zusammen mit installiertem SSL am sichersten, da es im Nachrichtentext übertragen wird.
Alle diese Methoden sind jedoch unsicher, da das darunter verwendete 7-Bit-Protokoll mit Hemmung gehackt werden kann. Auch durch eine Level 4 Webanwendungs-Firewall.
Steckdosen sind auch keine Garantie ... Auch wenn sie in gewisser Weise sicherer sind.
quelle
Dies ist ein alter Beitrag, aber ich möchte einige der Antworten ablehnen. Wenn Sie vertrauliche Daten übertragen, möchten Sie SSL verwenden. Wenn Sie SSL mit einem GET-Parameter verwenden (z. B.? Userid = 123), werden diese Daten im Klartext gesendet! Wenn Sie mit einem POST senden, werden die Werte in den verschlüsselten Nachrichtentext eingefügt und sind daher für die meisten MITM-Angriffe nicht lesbar.
Der große Unterschied besteht darin, wo die Daten weitergegeben werden. Es ist nur sinnvoll, dass die Daten, wenn sie in einer URL gespeichert sind, NICHT verschlüsselt werden können, da Sie sonst nicht zum Server weiterleiten können, da nur Sie die URL lesen können. So funktioniert ein GET.
Kurz gesagt, Sie können Daten in einem POST sicher über SSL übertragen, aber Sie können dies nicht mit einem GET tun, ob Sie SSL verwenden oder nicht.
quelle
Sogar POST akzeptiert GET-Anfragen. Angenommen, Sie haben ein Formular mit Eingaben wie user.name und user.passwd, die Benutzername und Kennwort unterstützen sollen. Wenn wir einfach einen? User.name = "mein Benutzer & user.passwd =" mein Passwort "hinzufügen, wird die Anfrage durch" Umgehen der Anmeldeseite "akzeptiert.
Eine Lösung hierfür besteht darin, Filter (Java-Filter als e) auf der Serverseite zu implementieren und zu erkennen, dass keine Zeichenfolgenabfragen als GET-Argumente übergeben werden.
quelle