wake-up-neo.com

Benutzername und Passwort in https url

Betrachten Sie die URL: https: // foo: [email protected]

Qualifiziert sich der Benutzername/Passwort-Teil im obigen Beispiel als "URL-Parameter", wie in diese Frage definiert?

55
jefflunt

Wenn Sie den Benutzernamen und das Kennwort vor den Host stellen, werden diese Daten nicht auf diese Weise an den Server gesendet. Es wird stattdessen abhängig vom verwendeten Authentifizierungsschema in einen Anforderungsheader umgewandelt. Meistens wird dies Basic Auth sein, das ich unten beschreibe. Ein ähnliches (aber wesentlich selteneres) Authentifizierungsschema ist Digest Auth , das heutzutage vergleichbare Sicherheitsfunktionen bietet.

Mit Basic Auth sieht die HTTP-Anfrage aus der Frage ungefähr so ​​aus:

GET / HTTP/1.1
Host: example.com
Authorization: Basic Zm9vOnBhc3N3b3Jk

Die Hash-ähnliche Zeichenfolge, die Sie dort sehen, wird vom Browser folgendermaßen erstellt: base64_encode(username + ":" + password).

Für Außenstehende der HTTPS-Übertragung sind diese Informationen (wie alles andere auf der HTTP-Ebene) verborgen. Sie sollten sich jedoch darum kümmern, den Client und alle Zwischenserver anzumelden. Der Benutzername wird normalerweise in den Serverprotokollen angezeigt, das Passwort jedoch nicht. Dies ist jedoch nicht garantiert. Wenn Sie diese URL auf dem Client mit z. curl, der Benutzername und das Passwort sind in der Prozessliste gut sichtbar und werden möglicherweise in der Bash-Verlaufsdatei angezeigt.

Wenn Sie die Vorgehensweise von ayush verwenden, werden der Benutzername und das Kennwort immer in den Serverprotokollen Ihres Webservers bzw. Anwendungsservers angezeigt , caches, ... es sei denn, Sie konfigurieren Ihre Server speziell, um sie nicht zu protokollieren. Dies gilt nur für Server, die die unverschlüsselten http-Daten lesen können, wie Ihr Anwendungsserver.

Die Basisauthentifizierung ist standardisiert und wird von Browsern implementiert, indem dieses kleine Popup mit Benutzernamen und Passwort angezeigt wird. Wenn Sie den Benutzernamen/das Passwort in ein über GET oder POST gesendetes HTML-Formular eingeben, müssen Sie die gesamte Anmelde-/Abmeldelogik selbst implementieren (was von Vorteil sein kann). Aber Sie sollten nie Benutzernamen und Passwörter durch GET-Parameter übertragen. Wenn Sie müssen, verwenden Sie stattdessen POST. Dies verhindert standardmäßig die Protokollierung dieser Daten.

Wenn Sie einen Authentifizierungsmechanismus mit einem Benutzer-/Kennworteingabeformular und einer nachfolgenden Cookie-basierten Sitzung implementieren, wie es heute häufig verwendet wird, müssen Sie sicherstellen, dass das Kennwort entweder mit POST requests- oder nur eines der oben genannten standardisierten Authentifizierungsschemata.

Abschließend kann ich sagen, dass die Übertragung von Daten auf diese Weise über HTTPS sicher ist, solange Sie darauf achten, dass das Kennwort nicht an unerwarteten Orten angezeigt wird. Dieser Hinweis gilt jedoch für jede Übertragung eines Passworts in irgendeiner Weise.

100
Holger Just