Base64 Sicherheit: Was die Codierung schützt und was nicht

Trennen Sie die umkehrbare Kodierung von der Verschlüsselung, Signatur und Validierung und verarbeiten Sie dekodierte Dokumente, ohne sie auszuführen.

Base64 bietet keine Geheimhaltung. Jeder, der den codierten Wert erhält, kann seine Bytes ohne Passwort oder Schlüssel wiederherstellen. Das Verstecken von Anmeldeinformationen in einer langen Zeichenfolge ändert deren Aussehen und nicht, wer sie lesen kann. Wenden Sie auf verschlüsselte Geheimnisse dieselben Handhabungsregeln an wie auf die Originale.

Verschlüsselung, Verschlüsselung und Signaturen beantworten unterschiedliche Fragen

Beim Codieren wird gefragt, wie Bytes durch ein textorientiertes System wandern können. Die Verschlüsselung schützt die Vertraulichkeit unter einem kryptografischen Schlüssel. Ein Authentifizierungs-Tag oder eine digitale Signatur kann belegen, dass die Daten von einer autorisierten Partei erstellt und nicht verändert wurden, sofern der Verifizierungsprozess und die Schlüssel korrekt sind. Eine einfache Prüfsumme hilft vor allem dabei, versehentliche Korruption zu erkennen. Keine dieser Garantien ergibt sich allein aus Base64.

Ein dekodiertes JWT ist ein nützliches Beispiel. Sein Header und seine Nutzlast sind lesbare Strukturen, aber durch deren Lesen werden weder die Signatur noch der Aussteller, die Zielgruppe oder die Ablaufrichtlinie überprüft. Behandeln Sie einen unbestätigten Anspruch als nicht vertrauenswürdige Eingabe. Lassen Sie nicht zu, dass das formatierte JSON eines Betrachters zu einer Autorisierungsentscheidung wird.

Halten Sie dekodierte Inhalte inaktiv

Eine Nutzlast kann in HTML, JavaScript, ein SVG mit aktivem Inhalt oder ein fehlerhaftes Dokument dekodiert werden. Text anzeigen mit textContent, nicht innerHTML. Führen Sie keinen entschlüsselten Code aus und fügen Sie keinen beliebigen SVG in Ihre Seite ein. Ein deklarierter Datentyp URI MIME wird vom Absender bereitgestellt und kann falsch sein. Dateisignaturen helfen bei der Identifizierung eines wahrscheinlichen Formats, ein übereinstimmender Header stellt jedoch nicht sicher, dass eine Datei vollständig oder sicher ist.

// decodedText comes from an untrusted payload.
const output = document.createElement('pre');
output.textContent = decodedText;
document.body.append(output); // displays markup as text

Legen Sie Grenzen fest, bevor Sie Speicher zuweisen

Verschlüsselter Text erweitert Daten, und ein Browser kann gleichzeitig die Eingabezeichenfolge, dekodierte Bytes und eine Vorschau speichern. Erzwingen Sie Beschränkungen vor der Dekodierung, schränken Sie akzeptierte Dokumenttypen ein und ermöglichen Sie Benutzern, lange Vorgänge abzubrechen. Eine fehlerhafte Eingabe sollte einen separaten Fehlerstatus anstelle einer Ausgabe erzeugen, die kopiert werden kann, als wären es erfolgreiche Daten.

Überprüfen Sie bei sensiblen Arbeiten das Netzwerkverhalten und die Aufbewahrungsrichtlinie des Tools. Die Browserverarbeitung und die Serververarbeitung API unterliegen unterschiedlichen Grenzen. Vermeiden Sie es, Token in Seiten-URLs einzufügen, wo sie in den Browserverlauf, Screenshots oder Zugriffsprotokolle gelangen können. Verwenden Sie beim Testen synthetische Daten mit derselben Struktur. RFC 4648 diskutiert Kodierungsmehrdeutigkeiten; Die Sicherheit eines größeren Protokolls hängt immer noch von seinem vollständigen Design ab.