Base64 não fornece sigilo. Qualquer pessoa que receba o valor codificado pode recuperar seus bytes sem senha ou chave. Ocultar credenciais em uma sequência longa altera sua aparência, e não quem pode lê-las. Aplique as mesmas regras de tratamento aos segredos codificados e aos originais.
Codificação, criptografia e assinaturas respondem a diferentes questões
A codificação pergunta como os bytes podem viajar através de um sistema orientado a texto. A criptografia protege a confidencialidade sob uma chave criptográfica. Uma etiqueta de autenticação ou assinatura digital pode estabelecer que os dados foram produzidos por uma parte autorizada e não foram alterados, desde que o processo de verificação e as chaves estejam corretos. Uma soma de verificação simples ajuda principalmente a detectar corrupção acidental. Nenhuma dessas garantias decorre apenas de Base64.
Um JWT decodificado é um exemplo útil. Seu cabeçalho e carga útil são estruturas legíveis, mas a leitura deles não verifica a assinatura, o emissor, o público ou a política de expiração. Trate uma declaração não verificada como uma entrada não confiável. Não deixe que o JSON formatado de um visualizador se torne uma decisão de autorização.
Mantenha o conteúdo decodificado inerte
Uma carga útil pode ser decodificada para HTML, JavaScript, um SVG contendo conteúdo ativo ou um documento malformado. Exibir texto com textContent, não innerHTML. Não execute código decodificado nem insira um SVG arbitrário em sua página. Um tipo de dados declarado URI MIME é fornecido pelo remetente e pode ser falso. Assinaturas de arquivo ajudam a identificar um formato provável, mas um cabeçalho correspondente não estabelece que um arquivo esteja completo ou seguro.
// decodedText comes from an untrusted payload.
const output = document.createElement('pre');
output.textContent = decodedText;
document.body.append(output); // displays markup as text
Defina limites antes de alocar memória
O texto codificado expande os dados e um navegador pode conter a string de entrada, os bytes decodificados e a visualização ao mesmo tempo. Imponha limites antes da decodificação, restrinja os tipos de documentos aceitos e permita que os usuários cancelem operações longas. A entrada malformada deve produzir um estado de erro separado em vez de uma saída que pode ser copiada como se fossem dados bem-sucedidos.
Para trabalhos confidenciais, inspecione o comportamento da rede e a política de retenção da ferramenta. O processamento do navegador e o processamento do servidor API têm limites diferentes. Evite colocar tokens em URLs de páginas, onde eles possam entrar no histórico do navegador, capturas de tela ou logs de acesso. Ao testar, use dados sintéticos com a mesma estrutura. RFC 4648 discute ambigüidades de codificação; a segurança de um protocolo maior ainda depende de seu design completo.