Base64 sicurezza: cosa protegge e cosa non protegge la codifica

Separa la codifica reversibile dalla crittografia, dalle firme e dalla convalida e gestisci i documenti decodificati senza eseguirli.

Base64 non fornisce segretezza. Chiunque riceva il valore codificato può recuperarne i byte senza password o chiave. Nascondere le credenziali in una lunga stringa ne modifica l'aspetto, non chi può leggerle. Applicare ai segreti codificati le stesse regole di gestione degli originali.

La codifica, la crittografia e le firme rispondono a domande diverse

La codifica chiede come i byte possano viaggiare attraverso un sistema orientato al testo. La crittografia protegge la riservatezza tramite una chiave crittografica. Un tag di autenticazione o una firma digitale possono stabilire che i dati sono stati prodotti da una parte autorizzata e non sono stati alterati, a condizione che il processo di verifica e le chiavi siano corrette. Un checksum semplice aiuta principalmente a rilevare la corruzione accidentale. Nessuna di queste garanzie deriva solo da Base64.

Un JWT decodificato è un esempio utile. L'intestazione e il payload sono strutture leggibili, ma la loro lettura non verifica la firma, l'emittente, il pubblico o la politica di scadenza. Tratta un'affermazione non verificata come input non attendibile. Non lasciare che il JSON formattato di un visualizzatore diventi una decisione di autorizzazione.

Mantieni inerte il contenuto decodificato

Un payload può essere decodificato in HTML, JavaScript, un SVG contenente contenuto attivo o un documento non valido. Visualizza il testo con textContent, no innerHTML. Non eseguire codice decodificato né inserire un SVG arbitrario nella tua pagina. Un tipo di dati dichiarato URI MIME viene fornito dal mittente e può essere falso. Le firme dei file aiutano a identificare un formato probabile, ma un'intestazione corrispondente non stabilisce che un file sia completo o sicuro.

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

Impostare i limiti prima di allocare memoria

Il testo codificato espande i dati e un browser può contenere la stringa di input, i byte decodificati e l'anteprima allo stesso tempo. Applica i limiti prima della decodifica, limita i tipi di documenti accettati e consenti agli utenti di annullare operazioni lunghe. L'input non corretto dovrebbe produrre uno stato di errore separato invece di un output che può essere copiato come se si trattasse di dati corretti.

Per lavori delicati, controlla il comportamento di rete e i criteri di conservazione dello strumento. L'elaborazione del browser e l'elaborazione del server API hanno limiti diversi. Evita di inserire token negli URL delle pagine, dove possono inserire la cronologia del browser, schermate o registri di accesso. Durante i test, utilizzare dati sintetici con la stessa struttura. RFC 4648 discute le ambiguità della codifica; la sicurezza di un protocollo più ampio dipende ancora dalla sua progettazione completa.