Base64 — это способ представления бинарных данных в виде
ASCII-строки, использующий набор из 64 символов: латинские буквы, цифры,
а также символы + и /. Вариант с выравниванием
дополнительно использует символ = в конце строки для
соблюдения кратности длины. В веб-разработке Base64 применяется для
передачи изображений, файлов, токенов и различных сериализованных данных
через HTTP, JSON и формы.
Валидация Base64-строк в JavaScript часто выполняется с помощью
библиотеки Validator.js, где предусмотрена функция
isBase64, позволяющая определить, соответствует ли строка
формату Base64 с учётом различных режимов строгости.
Функция проверки Base64 в Validator.js имеет следующий базовый интерфейс:
isBase64(str [, options])
Параметры:
str — проверяемая строкаoptions — объект дополнительных настроек проверкиВозвращает:
true — если строка соответствует Base64false — если строка невалиднаМинимальный пример использования:
const validator = require('validator');
validator.isBase64('aGVsbG8gd29ybGQ='); // true
validator.isBase64('hello world'); // false
Строка aGVsbG8gd29ybGQ= является корректным
Base64-представлением строки hello world.
Base64 может быть представлен в разных вариациях, и Validator.js позволяет учитывать особенности кодировки через опции.
A–Z, a–z,
0–9, +, /= в конце для выравниванияValidator.js поддерживает настройку поведения через объект
options.
validator.isBase64(str, { urlSafe: true })
При включении urlSafe используется URL-safe вариант
Base64:
+ заменяется на -/ заменяется на _= может отсутствоватьПример:
validator.isBase64('aGVsbG8td29ybGQ_', { urlSafe: true }); // true
Хотя в классическом Base64 padding (=) используется
обязательно, в реальных API встречаются строки без него. Validator.js
допускает такие случаи при определённых конфигурациях (в зависимости от
версии библиотеки).
Пример валидной строки без padding:
validator.isBase64('aGVsbG8gd29ybGQ'); // может быть true при ослабленной проверке
| Характеристика | Standard Base64 | URL-safe Base64 |
|---|---|---|
Символ + |
используется | заменён на - |
Символ / |
используется | заменён на _ |
Padding = |
часто обязателен | может отсутствовать |
| Применение | файлы, MIME | URL, токены, API |
Validator.js позволяет учитывать оба варианта в зависимости от контекста передачи данных.
Base64 часто используется для передачи файлов через JSON:
app.post('/upload', (req, res) => {
const { file } = req.body;
if (!validator.isBase64(file)) {
return res.status(400).send('Неверный формат файла');
}
// дальнейшая обработка
});
Некоторые системы используют Base64 для кодирования идентификаторов:
const isValidToken = validator.isBase64(token, { urlSafe: true });
Хотя Data URL содержит дополнительный префикс, Base64-часть может быть проверена отдельно:
const base64Part = dataUrl.split(',')[1];
validator.isBase64(base64Part);
Validator.js проверяет только синтаксическую корректность строки, но не гарантирует:
Это означает, что строка может быть валидным Base64, но после декодирования содержать мусор или неожиданные данные.
validator.isBase64('aG VsbG8='); // false
Base64 не допускает пробельных символов.
Base64 должен иметь длину, кратную 4 (в классическом варианте). Любое отклонение приводит к невалидности.
validator.isBase64('aGVsbG8td29ybGQ_'); // false без urlSafe
Любые символы вне допустимого алфавита приводят к ошибке:
validator.isBase64('hello!!=='); // false
В реальных приложениях isBase64 часто используется
вместе с другими проверками:
isLength — ограничение размера строкиisMimeType — проверка типа файлаisJSON — валидация структуры данныхПример комбинированной проверки:
const isValid =
validator.isBase64(data) &&
validator.isLength(data, { max: 500000 });
Проверка Base64 в Validator.js реализована через регулярные выражения и работает за линейное время O(n), где n — длина строки. Это делает функцию подходящей для массовой валидации входных данных, включая потоковую обработку API-запросов.
Base64 сам по себе не является механизмом защиты данных, однако часто встречается в:
Поэтому проверка корректности Base64 используется как первый фильтр перед дальнейшей валидацией подписи или расшифровки.
По умолчанию пустая строка не считается валидной Base64:
validator.isBase64(''); // false
В некоторых сценариях пустые значения допускаются через дополнительную логику приложения, но сама библиотека их не трактует как корректные данные.