Können Sie user / pass für die HTTP-Basisauthentifizierung in URL-Parametern übergeben?

153

Ich glaube, das ist nicht möglich, aber jemand, den ich kenne, bestand darauf, dass es funktioniert. Ich weiß nicht einmal, welche Parameter ich ausprobieren soll, und ich habe dies nirgendwo dokumentiert gefunden.

Ich habe versucht, http://myserver.com/~user=username&password=mypassword, aber es funktioniert nicht.

Können Sie bestätigen, dass es tatsächlich nicht möglich ist, den Benutzer / die Übergabe über HTTP-Parameter (GET oder POST) zu übergeben?

ripper234
quelle
@sam - was? Wie würde die vollständige URL aussehen?
Ripper234
4
Alles in der Spezifikation ietf.org/rfc/rfc1738.txt (3.1)
Smudge
@sam - Entschuldigung, ich konnte Ihren Kommentar aus irgendeinem Grund nicht analysieren.
Ripper234

Antworten:

199

Es ist in der Tat nicht möglich, den Benutzernamen und das Passwort über Abfrageparameter in der Standard-HTTP-Authentifizierung zu übergeben. Stattdessen verwenden Sie ein spezielles URL-Format wie das folgende: http://username:[email protected]/- Dadurch werden die Anmeldeinformationen im HTTP-Standardheader "Authorization" gesendet.

Es ist möglich, dass sich jeder, mit dem Sie gesprochen haben, ein benutzerdefiniertes Modul oder einen benutzerdefinierten Code ausgedacht hat, mit dem die Abfrageparameter überprüft und die Anmeldeinformationen überprüft wurden. Dies ist jedoch keine Standard-HTTP-Authentifizierung, sondern eine anwendungsspezifische Sache.

womble
quelle
1
Danke, das ist genau das, wonach ich gesucht habe ... es ist nicht kritisch, dass es sich um GET-Parameter handelt, nur dass ich sie in die URL einfügen kann.
Ripper234
42
Zu Ihrer Information, das http://username:[email protected]Format wird weder vom Internet Explorer noch von Chrome mehr unterstützt , wäre nicht überrascht, wenn andere dem Beispiel gefolgt wären, wenn dies noch nicht geschehen wäre.
TJ Crowder
11
Funktioniert eigentlich gut in Chrome. Nur IE ist eine verwöhnte Göre.
Damien Overeem ツ
1
@DamienOvereem auf welcher Chrome-Version stehst du? Ich bin auf Mac OS X 37 und es scheint nicht für mich zu arbeiten
Chris DaMour
11
Ich habe seitdem erfahren, dass Chrome es eine Zeit lang deaktiviert hat, aber diese Funktion später wieder aktiviert hat. Ich habe auch erfahren, dass Safari beim Aufrufen solcher Links Phishing-Fehler verursacht. Grundsätzlich ist die Zeit der url-basierten HTTP-Authentifizierung vorbei.
Damien Overeem ツ
18

Das Übergeben von Standardauthentifizierungsparametern in einer URL wird nicht empfohlen

Hierfür gibt es ein Authorization-Header-Feld. Überprüfen Sie es hier: http-Header-Liste

Wie man es benutzt, steht hier: Basic Access Authentication

Dort können Sie auch nachlesen, dass, obwohl dies von einigen Browsern noch unterstützt wird, die vorgeschlagene Lösung zum Hinzufügen der Basisberechtigungsnachweise in der URL nicht empfohlen wird.

Lesen Sie auch Kapitel 4.1 in RFC 2617 - HTTP-Authentifizierung, um weitere Informationen zu erhalten, warum Sie die Standardauthentifizierung NICHT verwenden sollten.


Übergabe von Authentifizierungsparametern in Abfragezeichenfolge

Bei Verwendung von OAuth oder anderen Authentifizierungsdiensten können Sie Ihr Zugriffstoken häufig auch in einer Abfragezeichenfolge statt in einem Autorisierungsheader senden.

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD
Verwelken
quelle
Und wie verschlüsselt man einen Authorization-Header in eine URL?
womble
2
Ist das nicht das Formular, das Sie angegeben haben, das jetzt veraltet ist?
womble
2
Die Frage, die Sie mit "Zu diesem Zweck gibt es ein Autorisierungsheaderfeld" beantwortet haben, lautete, wie Authentifizierungsparameter in die URL eingefügt werden sollen . Wenn Sie keine HTTP-Header-Felder in eine URL kodieren können (was Sie nicht können), ist Ihre Antwort eine Nicht-Sequenzierung.
womble
Können Sie angeben, wo im URI-Standard die Übergabe grundlegender Authentifizierungsparameter in URI veraltet ist? RFC 2396 sagt nur, dass es "NICHT EMPFOHLEN" ist, da Authentifizierungsdetails im Klartext unter vielen Umständen keine gute Idee sind (da stimme ich zu), während RFC 7235 nichts erwähnt. Nirgendwo in den technischen Daten, die ich durchsuchen kann, steht, dass sie veraltet sind.
Lie Ryan
1
@Wilt: Ich muss mich entschuldigen, du hast ja recht. Ihr Hinweis, dass die Spezifikation "geändert" wurde, hat mich dazu veranlasst, weitere Untersuchungen durchzuführen (ein RFC wird niemals geändert, sobald er veröffentlicht / nummeriert ist). Ich habe gerade festgestellt, dass RFC 2396 von RFC 3986 abgelöst wurde , was ich vorher nicht finden konnte. RFC 3986 erwähnt die Ablehnung von Benutzername: Passwort-Syntax:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan
17

http: // username: [email protected] funktioniert für FireFox, Chrome und Safari, jedoch nicht für IE.

Microsoft Knowledge Base

Girish Kumar
quelle
2
Diese Funktion wurde aus Chrome 19+ entfernt. Siehe code.google.com/p/chromium/issues/detail?id=123150
Moshe Katz,
4
Durch das Lesen dieses Fehlerberichts wurde es wieder in Chrome 20 aufgenommen. Sicherlich würde ich erwarten, dass sich weiterhin viele darüber beschweren, wenn es nicht so gewesen wäre.
womble
Ich habe es jetzt für den Internet Explorer angefordert: connect.microsoft.com/IE/feedback/details/873575/… . Etwas anderer Anwendungsfall, geht aber auf das gleiche Problem ein;)
SimonSimCity
@Diago Wenn das Passwort '@' enthält, funktioniert es nicht. es gibt einen fatalen Fehler, kann mir jemand sagen, wie wir Benutzernamen und Passwort auf einmal vergeben können
Ashish Jain
@AshishJain - Ich würde versuchen, das @im Passwort als zu maskieren %40. (Ich weiß jedoch nicht, ob das funktioniert und es hängt möglicherweise von der Server- oder Browser / Server-Kombination ab.)
David Moles
0

Es ist (offensichtlich) möglich, einen beliebigen String in den GET-Parametern zu senden, obwohl nicht empfohlen wird, Login und Passwort zu senden, da dies die Sichtbarkeit erhöht, insbesondere wenn es sich nicht um eine AJAX-Anfrage handelt.

Sie müssen dann jedoch die Serverseite codieren, um den Anmeldenamen und das Kennwort zu extrahieren, und sie dann auf die erforderliche Weise validieren und verwenden.

Steve Smith
quelle