Base64 安全:編碼能做什麼,不能保護什麼

區分可逆編碼、加密、簽名與內容校驗,安全地檢查解碼後的文件。

Base64 不提供保密能力。拿到編碼值的人不需要密碼或金鑰,就能還原原始位元組。把憑據變成長字串,只改變了外觀。編碼後的金鑰、令牌和個人資訊應與原文采用同樣的保護措施。

編碼、加密與簽名解決不同問題

編碼解決位元組如何通過文本系統傳輸;加密通過金鑰保護內容;認證標籤或數字簽名需要正確驗證,才能支援來源與完整性判斷;普通校驗和主要用於發現意外損壞。僅有 Base64 不會獲得這些保證。

JWT 的頭部與載荷解碼後可以閱讀,但這不等於簽名有效,也不等於發行者、受眾或過期策略已經通過檢查。不要把檢視器顯示的 JSON 直接作為授權依據。

解碼內容應保持不可執行

載荷可能是 HTML、指令碼、帶活動內容的 SVG,或損壞文件。顯示文字時使用 textContent,不要使用 innerHTML。不要執行解碼程式碼,也不要把未知 SVG 直接插入頁面。Data URI 宣告的 MIME 型別由輸入方決定,可能不真實;檔案頭只能提示格式,不能證明檔案完整或安全。

const output = document.createElement('pre');
output.textContent = decodedText;
document.body.append(output); // 將標記顯示為文字

在分配記憶體之前限制大小

瀏覽器可能同時儲存輸入字串、解碼位元組和預覽。應先檢查大小,再處理資料;限定可接受格式,並支援取消耗時操作。失敗資訊應放在獨立區域,避免被當作成功結果複製。

處理敏感內容前應檢視工具的網路行為與儲存政策。本地工具和伺服器 API 的邊界不同。避免把令牌放在網頁 URL 中,防止進入歷史記錄、截圖或訪問日誌。除錯時優先使用結構相同的合成數據。編碼歧義可參考 RFC 4648,完整協議仍需要獨立的安全設計。