Frage

Ich bin die Schaffung eines sicheren web-basierte API, die HTTPS verwendet; aber wenn ich den Benutzern erlauben, sie zu konfigurieren (einschließlich das Senden Passwort) mit einem Query-String wird dies auch sicher sein, oder sollte ich ihn mit Gewalt zu über eine POST zu tun?

War es hilfreich?

Lösung

Ja, es ist. Aber mit GET für sensible Daten ist eine schlechte Idee aus mehreren Gründen:

  • Meist Referrer Leckage (ein externes Bild in der Zielseite könnte das Passwort [1] Leck)
  • Das Passwort wird in Server-Logs gespeichert werden (was natürlich schlecht ist)
  • Geschichte Caches in Browser

Deshalb, auch wenn Abfragezeichen gesichert ist es nicht empfehlenswert ist sensible Daten über Abfragezeichenfolgeflag zu übertragen.

[1] Obwohl ich diese RFC beachten muß besagt, dass Browser Referrer nicht von HTTPS zu HTTP senden sollte. Aber das bedeutet nicht eine schlechte 3rd-Party-Browser-Symbolleiste oder ein externes Bild / Blitz von einer HTTPS-Seite wird es nicht undicht werden.

Andere Tipps

Von einer „schnüffeln das Netzwerkpaket“ Sicht eine GET-Anforderung ist sicher, da der Browser zunächst die sichere Verbindung aufgebaut wird und dann die Anforderung der GET-Parameter enthält, senden. Aber GET-URL wird in den Browser des Benutzers Geschichte / automatische Vervollständigung gespeichert werden, die nicht ein guter Ort, zum Beispiel zu speichern Passwortdaten in. Natürlich nur gilt, wenn Sie die breitere „Webservice“ Definition nehmen, die den Dienst von einem Browser zugreifen können, wenn Sie es aus der diese benutzerdefinierte Anwendung nur Zugriff sollte kein Problem sein.

So verwenden Post zumindest für Passwortdialoge bevorzugt werden sollte. Wie auch in dem Link littlegeek wies darauf hin, veröffentlichte eine GET URL eher auf Ihre Server-Protokolle geschrieben werden soll.

  

Ja , wird Ihre Abfrage-Strings verschlüsselt werden.

Der Grund ist, dass die Abfrage-Strings Teil des HTTP-Protokolls sind, die ein Anwendungsschichtprotokoll, während der Sicherheit (SSL / TLS) Teil von der Transportschicht kommt. Die SSL-Verbindung hergestellt wird und dann die Abfrageparameter (die das HTTP-Protokoll gehören) werden an den Server gesendet werden.

Wenn eine SSL-Verbindung hergestellt wird, Ihre Client die folgenden Schritte durchführen, um. Angenommen, Sie versuchen, auf eine Website einzuloggen Namen example.com und möchten Ihre Anmeldeinformationen mit Hilfe von Abfrageparametern senden. Ihre vollständige URL wie folgt aussehen kann:

https://example.com/login?username=alice&password=12345)
  1. Ihr Client (zum Beispiel Browser / mobile app) zuerst Ihre Domain-Namen example.com zu einer IP-Adresse (124.21.12.31) mit einer DNS-Anfrage lösen. Wenn diese Informationen abfragen, nur domänenspezifische Informationen werden verwendet, das heißt, nur example.com verwendet werden.
  2. Nun wird Ihr Client versuchen, auf den Server mit der IP-Adresse 124.21.12.31 zu verbinden und versucht, auf Port 443 (SSL-Service-Port nicht dem Standard-HTTP-Port 80).
  3. verbinden
  4. Nun wird der Server bei example.com seine Zertifikate an Ihren Kunden senden.
  5. Ihr Kunde wird die Zertifikate überprüfen und starten einen gemeinsamen geheimen Schlüssel für die Sitzung ausgetauscht werden.
  6. Nach dem erfolgreichen Herstellen einer sicheren Verbindung, erst dann Ihre Abfrage-Parameter über die sichere Verbindung gesendet werden.

Daher werden Sie keine sensiblen Daten aus. Jedoch Ihre Anmeldeinformationen über eine HTTPS-Sitzung das Senden dieser Methode ist nicht der beste Weg. Sie sollten für einen anderen Ansatz gehen.

Ja. Der gesamte Text von einer HTTPS-Sitzung wird durch SSL gesichert. Dazu gehören die Abfrage und die Header. In dieser Hinsicht wäre eine POST und GET genau das gleiche.

In Bezug auf die Sicherheit Ihrer Methode, gibt es keinen wirklichen Weg, ohne angemessene Kontrolle zu sagen.

SSL-Verbindung zunächst mit dem Host, so dass der Hostname und die Portnummer werden als Klartext übertragen. Wenn der Host antwortet und die Herausforderung erfolgreich ist, wird der Client die HTTP-Anforderung mit der tatsächlichen URL verschlüsselt (das heißt alles nach dem dritten Schrägstrich) und und an den Server senden.

Es gibt mehrere Möglichkeiten, diese Sicherheit zu brechen.

Es ist möglich, einen Proxy zu handeln, als „Mann in der Mitte“ zu konfigurieren. Grundsätzlich sendet der Browser die Anforderung an den realen Server auf den Proxy zu verbinden. Wenn der Proxy diese Weise konfiguriert ist, wird es über SSL an den realen Server verbinden, aber der Browser immer noch an den Proxy sprechen. Also, wenn ein Angreifer Zugriff des Proxy gewinnen kann, kann er alle Daten sehen, die durch sie in Klartext fließt.

Ihre Anfragen werden auch in der Browser-History zu sehen sein. Benutzer können zu einem Lesezeichen der Seite versucht werden. Einige Benutzer haben die Lesezeichen-Synchronisierung-Tools installiert, so könnte das Passwort auf deli.ci.us oder einem anderen Ort enden.

Schließlich jemand könnte Ihren Computer gehackt und installierte einen Tastatur-Logger oder einen Bildschirm Schaber (und eine Menge Trojanisches Pferd Typ-Viren zu tun). Da das Passwort direkt auf dem Bildschirm sichtbar ist (wie in einem Passwort-Dialog auf „*“ im Gegensatz), das ist ein andere Sicherheitslücke.

Fazit: Wenn es um die Sicherheit geht, immer auf den ausgetretenen Pfaden verlassen. Es ist einfach zu viel, dass Sie nicht wissen, wird nicht denken, und das bricht den Hals.

Ich bin nicht mit der Aussage über [...] Referrer Leckage (ein externes Bild in der Zielseite könnte das Passwort Leck) zustimmen in Slough's Antwort .

Der HTTP 1.1 RFC heißt es ausdrücklich:

  

Kunden zählen, sollten Sie nicht einen Referer   Header-Feld in einem (nicht abgesichert) HTTP   verlangen, wenn die aufgerufene Seite wurde   übertragen mit einem sicheren Protokoll.

Wie auch immer, Server-Logs und Browser-History ist mehr als ausreichend Gründe keine sensiblen Daten in dem Query-String zu setzen.

Ja, solange niemand auf dem Monitor über die Schulter schaut.

Ja, von dem Moment an Dir ein HTTPS-Verbindung alles ist sicher etablieren. Der Query-String (GET) als POST wird über SSL gesendet.

Sie können mit einem Passwort als MD5-Hash-param senden mit etwas Salz hinzugefügt. Vergleichen Sie es auf der Server-Seite für Auth.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top