🔐
← ZurĂŒck zu Anleitungen

Base64-URL-sichere Kodierung: Was sie ist und warum sie wichtig ist

· Tags: base64, url-safe, base64url, jwt, encoding, web-development, api

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.