Wie übergebe ich ein Fragezeichen (?) im Kennwort für die HTTP-Basisauthentifizierung in URL-Parametern?

Wie übergebe ich ein Fragezeichen (?) im Kennwort für die HTTP-Basisauthentifizierung in URL-Parametern?

Ich automatisiere eine Website, die eine HTTP-Basisauthentifizierung erfordert.

Die unter diesem Link gegebenen Vorschläge funktionieren in den meisten Fällen wunderbar:

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

Bei manchen Benutzern ist das Passwort jedoch mit einem Fragezeichen ( ?) versehen. Bitte geben Sie uns einen Hinweis, wie Sie das Fragezeichen umgehen können.

PS: Mir ist bewusst, dass @der Benutzername mit maskiert werden kann %40.

Antwort1

Ich nehme an, Sie meinen dieBenutzerinformationTeil der URL, in dem die Benutzeranmeldeinformationen übergeben werden, nicht "URL-Parameter" (die Teil derAbfragezeichenfolge):

https://<userinfo>@example.com/foo?<query-string>

Wie bei jedem Zeichen, das in einem Teil der URL nicht zulässig ist (weil es eine besondere Bedeutung haben könnte), muss es URL-kodiert sein (Prozentcodiert), %gefolgt vom zweistelligen Hex-Code für dieses Zeichen.

Also, @ist %40und ?ist %3F.

Dies sind jedoch nicht die einzigen beiden Zeichen, die möglicherweise eine URL-Kodierung benötigen. Sie sollten den Wert durch eine URL-Kodierungsfunktion in Ihrem Skript übergeben, um diesen Teil der URL korrekt zu kodieren.

RFC 3986definiert, welche Zeichen (uncodiert) imBenutzerinformationTeil der URL:

userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )
unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

Alles andere muss also prozentkodiert werden, einschließlich :und %- wenn sie Teil desBenutzeroderPasswortTeile (um deren besondere Bedeutung zu negieren).

Im selben Dokument heißt es außerdem:

Die Verwendung des Formats „Benutzer:Passwort“ im Feld „Userinfo“ ist veraltet.

Folglich war die Browserunterstützung lückenhaft und wechselte zwischen den Versionen (Sicherheit war ein Hauptanliegen). Ich glaube, die neuesten Versionen von Chrome (getestet v79) und Firefox unterstützen Benutzeranmeldeinformationen in der URL. Ich habe Kommentare gesehen, dass dies auch im neuesten Safari(?) funktioniert, obwohl dies lange Zeit nicht funktioniert hat und derzeit bei mir nicht funktioniert (obwohl ich nicht die neueste Version unter iOS 12.4.1 verwende). UndIE unterstützt keine Benutzernamen und Passwörter mehr in der URLvor einigen Jahren und es sieht nicht so aus, als würde es zurückkommen.

verwandte Informationen