Base64 не обеспечивает секретности. Любой, кто получит закодированное значение, может восстановить его байты без пароля или ключа. Скрытие учетных данных в длинной строке меняет их внешний вид, а не то, кто может их прочитать. Применяйте к закодированным секретам те же правила обработки, что и к оригиналам.
Кодирование, шифрование и подписи отвечают на разные вопросы
Кодирование спрашивает, как байты могут проходить через текстовую систему. Шифрование защищает конфиденциальность с помощью криптографического ключа. Тег аутентификации или цифровая подпись могут подтвердить, что данные были созданы уполномоченной стороной и не были изменены, при условии, что процесс проверки и ключи верны. Простая контрольная сумма в основном помогает обнаружить случайное повреждение. Ни одна из этих гарантий не следует только из Base64.
Декодированный JWT является полезным примером. Его заголовок и полезные данные являются читаемыми структурами, но их чтение не проверяет подпись, эмитента, аудиторию или политику срока действия. Считайте непроверенное утверждение ненадежным вводом. Не позволяйте отформатированному JSON зрителя стать решением об авторизации.
Сохраняйте декодированный контент инертным
Полезная нагрузка может декодироваться в HTML, JavaScript, SVG, содержащую активное содержимое, или в некорректный документ. Отображение текста с помощью textContent, не innerHTML. Не запускайте декодированный код и не вставляйте произвольный SVG на свою страницу. Объявленный тип данных URI MIME предоставляется отправителем и может быть ложным. Подписи файлов помогают определить вероятный формат, но соответствующий заголовок не подтверждает, что файл является полным или безопасным.
// decodedText comes from an untrusted payload.
const output = document.createElement('pre');
output.textContent = decodedText;
document.body.append(output); // displays markup as text
Установите ограничения перед выделением памяти
Закодированный текст расширяет данные, и браузер может одновременно хранить входную строку, декодированные байты и предварительный просмотр. Установите ограничения перед декодированием, ограничьте допустимые типы документов и позвольте пользователям отменять длительные операции. Неверный ввод должен создавать отдельное состояние ошибки вместо вывода, который можно скопировать, как если бы это были успешные данные.
Для конфиденциальной работы проверьте поведение инструмента в сети и политику хранения. Обработка браузера и обработка сервера API имеют разные границы. Избегайте размещения токенов в URL-адресах страниц, где они могут вводить историю браузера, снимки экрана или журналы доступа. При тестировании используйте синтетические данные с одинаковой структурой. RFC 4648 обсуждаются неоднозначности кодирования; безопасность более крупного протокола по-прежнему зависит от его полной конструкции.