Base64-URL-sichere Kodierung: Was sie ist und warum sie wichtig ist
Was ist Base64-URL-sichere Kodierung?
Base64-URL-sichere Kodierung (auch Base64url genannt) ist eine Variante von Standard-Base64, die Zeichen mit besonderen Bedeutungen in URLs und Dateinamen durch sichere Alternativen ersetzt. Standard-Base64 verwendet + und / als Teil seines 64-Zeichen-Alphabets sowie = fĂŒr Padding â und alle drei sind in URLs, Query-Strings und Dateipfaden problematisch.
Base64url löst dies mit zwei einfachen Ersetzungen:
| Standard-Base64 | URL-sicheres Base64 |
|-----------------|---------------------|
| + (plus) | - (minus) |
| / (slash) | _ (underscore) |
| = (padding) | weggelassen (in der Regel) |
Warum Standard-Base64 URLs bricht
Wenn ein Base64-kodierter String mit + oder / in einer URL erscheint, wird das Verhalten von Browser und Server unvorhersehbar.
Das +-Problem
In URL-Query-Strings wird das Zeichen + als Leerzeichen interpretiert. Dieses Verhalten stammt aus der application/x-www-form-urlencoded-Spezifikation und fĂŒhrt dazu, dass dekodierte Daten unerwartete Leerzeichen enthalten.
Ein Base64-String wie Pj4+Pz8/Pw== enthĂ€lt zum Beispiel +-Zeichen. Wenn dieser in einem URL-Parameter ?token=Pj4+Pz8/Pw== erscheint, sieht der Server ?token=Pj4 Pz8/Pw== â das + wird zu einem Leerzeichen.
Das /-Problem
In URL-Pfaden ist das Zeichen / ein Pfadtrenner. Ein Base64-String wie ab/CD+Ef== enthÀlt ein /, das als Verzeichnisebene interpretiert wird. Wenn dieser in einem URL-Segment erscheint, können sowohl Client als auch Server die Struktur falsch interpretieren.
Das =-Problem
Das Zeichen = wird fĂŒr SchlĂŒssel-Wert-Paare in Query-Strings verwendet. Ein abschlieĂendes = in ?data=SGVsbG8= könnte mehrdeutig sein â ist das = Teil des Base64-Paddings oder der Query-Parameter-Syntax?
WÀhrend Prozent-Kodierung diese Probleme beheben kann (+ wird zu %2B, / wird zu %2F), blÀht sie die StringlÀnge auf und erschwert das Debugging. Base64url ist die sauberere Lösung.
So funktioniert Base64url
Base64url ist formal in RFC 4648 Abschnitt 5 definiert. Es verwendet exakt denselben Algorithmus wie Standard-Base64 â 3 Bytes werden zu 4 Zeichen â jedoch mit der Ein-Zeichen-Ersetzung an den Positionen 62 und 63 des Alphabets:
- Alphabet-Index 62:
+â-(minus) - Alphabet-Index 63:
/â_(underscore)
Padding (=) wird in der Regel entfernt, da es beim Dekodieren aus der StringlĂ€nge abgeleitet werden kann. Ein Base64url-String ist immer ein gĂŒltiger URL-Bestandteil ohne zusĂ€tzliches Escaping.
Vorher und Nachher
So sehen dieselben BinÀrdaten in beiden Formaten aus:
Standard: Pj4+Pz8/Pw==
URL-safe: Pj4-Pz8_Pw
Wo Base64url verwendet wird
JSON Web Tokens (JWT)
JWT ist der bekannteste Anwender von Base64url. Jedes JWT besteht aus drei Teilen â Header, Payload und Signatur â die jeweils URL-sicher Base64-kodiert und durch Punkte getrennt sind:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNqP0m2iTgCjD0
Beachten Sie die Bindestriche und Unterstriche â keine Pluszeichen oder SchrĂ€gstriche. Wenn JWT Standard-Base64 verwenden wĂŒrde, wĂŒrden Tokens brechen, wenn sie als URL-Parameter ĂŒbergeben werden, was die hĂ€ufigste Verwendung in Webanwendungen ist.
OAuth und OpenID Connect
Sowohl OAuth 2.0 als auch OpenID Connect stĂŒtzen sich fĂŒr Zugriffstokens und ID-Tokens auf JWT und machen die Base64url-Kodierung zu einem Fundament der modernen Authentifizierung. Der Autorisierungs-Code-Flow, der Implicit-Flow und der Client-Credentials-Flow ĂŒbertragen alle Tokens, die Base64url verwenden.
Web-APIs und Query-Parameter
Viele REST- und GraphQL-APIs akzeptieren Base64-kodierte Daten in Query-Parametern fĂŒr Paginierungs-Cursor, Filter oder kodierte Payloads. Base64url stellt sicher, dass diese Parameter ohne zusĂ€tzliche URL-Kodierung korrekt funktionieren.
Reales Beispiel â API-Cursor-Paginierung:
GET /api/users?cursor=MjAyNC0wMS0xNVQxMDozMDowMFo
Die GitHub-API verwendet genau dieses Muster fĂŒr die Paginierung groĂer Ergebnismengen.
Dateinamen und Dateispeicherung
Base64url-Strings ergeben sichere Dateinamen, da sie keine Pfadtrenner (/), keine Sonderzeichen, die Dateisysteme verwirren, und keine Zeichen enthalten, die unter Windows ungĂŒltig sind (:, *, ? usw.).
Content Delivery Networks und Cache-Keys
CDNs und Caching-Schichten verwenden oft Base64url-kodierte Werte als Cache-Keys. Standard-Base64 mit / wĂŒrde im Cache-Namespace falsche Verzeichnishierarchien erzeugen und zu mehrdeutigen Keys fĂŒhren.
Konvertierung zwischen Standard-Base64 und Base64url
Die Konvertierung zwischen den beiden Varianten ist in jeder Sprache unkompliziert:
JavaScript
// Standard Base64 to URL-safe Base64
function base64ToBase64url(base64) {
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
// URL-safe Base64 to Standard Base64
function base64urlToBase64(base64url) {
let result = base64url.replace(/-/g, '+').replace(/_/g, '/');
// Restore padding
while (result.length % 4) {
result += '=';
}
return result;
}
Node.js
Node.js bietet seit Version 15.7.0 native Base64url-UnterstĂŒtzung:
// Encode to Base64url
const encodedUrl = Buffer.from('Hello, world!').toString('base64url');
console.log(encodedUrl);
// Output: SGVsbG8sIHdvcmxkIQ
// Decode from Base64url
const decoded = Buffer.from(encodedUrl, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!
Python
import base64
# Encode to Base64url
encoded = base64.urlsafe_b64encode(b"Hello, world!")
print(encoded.decode())
# Output: SGVsbG8sIHdvcmxkIQ==
# Decode from Base64url
decoded = base64.urlsafe_b64decode(encoded)
print(decoded.decode())
# Output: Hello, world!
Wann Standard-Base64 und wann Base64url verwenden
Verwenden Sie Standard-Base64, wenn:
- E-Mail-AnhÀnge kodiert werden (der MIME-Standard verlangt es)
- Data-URLs fĂŒr die HTML/CSS-Einbettung erzeugt werden
- Daten in Datenbanken gespeichert werden, bei denen URL-Sicherheit irrelevant ist
- Mit Altsystemen interagiert wird, die Standard-Base64 erwarten
Verwenden Sie Base64url, wenn:
- JWT-Tokens erstellt oder geparst werden
- kodierte Daten in URL-Query-Parametern oder Pfadsegmenten ĂŒbergeben werden
- Dateinamen aus BinÀrdaten erzeugt werden
- Cache-Keys oder Identifikatoren erstellt werden
- Mit OAuth-Tokens oder OpenID Connect gearbeitet wird
Probieren Sie Base64-URL-sichere Kodierung online aus
Verwenden Sie unseren kostenlosen Online-Base64-Encoder und -Decoder, um zwischen Standard-Base64- und URL-sicheren Base64-Formaten zu konvertieren. FĂŒgen Sie Ihre Daten ein, wĂ€hlen Sie Ihre Variante und erhalten Sie das Ergebnis sofort.