So dekodieren Sie einen Basic-Auth-Header
- Fügen Sie den Wert in Authorization-Header, Basic-Token oder URL mit Zugangsdaten ein. All das funktioniert:
Authorization: Basic YWRtaW46czNjcjN0OnBhc3M=Proxy-Authorization: Basic …Basic YWRtaW46czNjcjN0OnBhc3M=oder nur das Tokenhttps://user:password@host/path
- Lassen Sie den Zeichensatz auf Automatisch, oder erzwingen Sie UTF-8 oder ISO-8859-1, wenn das Ergebnis falsch aussieht.
- Lesen Sie Benutzername und Passwort, kopieren Sie eines davon, und prüfen Sie Dekodierte Bytes (Hex), wenn ein Zeichen verdächtig aussieht.
Dekodiert wird nur das Schema Basic. Digest- und NTLM-Header haben ein anderes Format und werden als anderes Schema gemeldet.
Was der Decoder zeigt
| Eingabe | Benutzername | Passwort | Hinweis |
|---|---|---|---|
Basic YWRtaW46czNjcjN0OnBhc3M= | admin | s3cr3t:pass | Getrennt wird nur am ersten Doppelpunkt; das Passwort behält seinen. |
dGVzdDoxMjOj | test | 123£ | Kein gültiges UTF-8, daher fällt Automatisch auf Latin-1 zurück. |
dGVzdDoxMjPCow== | test | 123£ | Derselbe Text, UTF-8-Bytes. |
https://ci-bot:p%40ss@ci.example.com/ | ci-bot | p@ss | Aus der URL übernommen und prozentdekodiert. |
Bearer eyJhbGciOi… | Fehler: ein Bearer-Token, mit Link zum JWT-Decoder. |
Die automatische Erkennung arbeitet der Reihe nach. Reines ASCII wird in jedem Zeichensatz gleich dekodiert; Bytes, die gültiges UTF-8 bilden, werden als UTF-8 gelesen; alles andere als ISO-8859-1, der alte Standard für HTTP-Header. Latin-1 bedeutet hier echtes ISO-8859-1. Windows-1252 weicht davon im Bereich 0x80–0x9F ab, wo Zeichen wie € liegen, ein Windows-1252-Passwort kann also als Steuerzeichen erscheinen.
Der Decoder ist bei schlampigen Tokens nachsichtig, etwa bei fehlendem =-Padding oder URL-sicheren - und _, und weist darauf hin, weil strenge Server sie ablehnen würden. Ergibt das Dekodieren Text ganz ohne Doppelpunkt, war der Wert kein Paar user:password, und das Tool meldet das.
Wo Basic-Zugangsdaten auftauchen
- Entwicklertools im Browser. Der Netzwerk-Tab zeigt die Request-Header jedes Aufrufs, einschließlich
Authorization. - curl.
curl -vgibt die Anfrage aus,-u user:passerscheint also als> Authorization: Basic …. - HAR-Dateien und Proxy-Mitschnitte, die die vollständigen Header jeder Anfrage speichern.
- Server- und Proxy-Konfigurationen, in denen ein fest eingetragener Header einem Backend Zugang verschafft, etwa
proxy_set_header Authorization "Basic …"in nginx. - Zugangsdaten für Docker-Registrys. Das Feld
authin~/.docker/config.jsonist Base64 vonuser:password; der dockerconfigjson-Decoder öffnet die ganze Datei. - Anwendungslogs, wenn ein Framework eingehende Header ungeschwärzt protokolliert.
Jeder dieser Fälle ist ein Klartextpasswort mit einer Schicht Kodierung, behandeln Sie es also wie das Passwort selbst. Base64 ist keine Verschlüsselung erklärt, warum die Kodierung nichts schützt.
Den Header auf dem Server dekodieren
Frameworks erledigen das normalerweise für Sie, aber ein kleiner Parser ist in Skripten und Tests nützlich:
import base64
def parse_basic(header_value):
scheme, _, token = header_value.strip().partition(" ")
if scheme.lower() != "basic":
raise ValueError("not a Basic credential")
user, colon, password = base64.b64decode(token).decode("utf-8").partition(":")
if not colon:
raise ValueError("no colon in the decoded value")
return user, password
print(parse_basic("Basic YWRtaW46czNjcjN0OnBhc3M="))
Die Ausgabe ist ('admin', 's3cr3t:pass'). Der Name des Schemas unterscheidet nicht zwischen Groß- und Kleinschreibung, vergleichen Sie ihn also in Kleinbuchstaben, und verwenden Sie immer partition oder split(":", 1), damit ein Doppelpunkt im Passwort erhalten bleibt. Prüfen Sie das Passwort mit einem Vergleich in konstanter Zeit, etwa hmac.compare_digest auf den kodierten Bytes, statt mit ==. Für die andere Richtung nehmen Sie den Basic-Auth-Header-Generator; weitere Base64-Rezepte stehen auf der Python-Seite.
Häufige Fragen
Wie dekodiere ich ein Basic-Auth-Token von Hand?
Entfernen Sie das Wort Basic und das Leerzeichen, dekodieren Sie den Rest aus Base64 und trennen Sie am ersten Doppelpunkt. Unter Linux oder macOS gibt echo 'YWRtaW46czNjcjN0OnBhc3M=' | base64 -d den Text admin:s3cr3t:pass aus.
Was bedeutet „Das ist ein Bearer-Token“?
Der Header verwendet das Schema Bearer, er trägt also ein Token statt Benutzername und Passwort. Bearer-Tokens sind oft JWTs; öffnen Sie sie im JWT-Decoder.
Warum enthält das dekodierte Passwort ein seltsames Zeichen?
Die Bytes wurden vermutlich in einem anderen Zeichensatz geschrieben als dem, mit dem sie gelesen werden. Schalten Sie den Zeichensatz zwischen Automatisch, UTF-8 und ISO-8859-1 um und prüfen Sie die Hex-Bytes: C2 A3 ist £ in UTF-8, ein einzelnes A3 ist £ in Latin-1.
Ich habe einen Basic-Auth-Header in einem Log gefunden. Was nun?
Betrachten Sie das Passwort als geleakt und ändern Sie es. Dann stopfen Sie das Leck: Konfigurieren Sie Proxy, Webserver oder Logging-Bibliothek so, dass der Header Authorization geschwärzt wird.