-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Signed
Serializer::signed($key) — HMAC-SHA256-подпись поверх любого формата: нагрузка
становится tamper-proof для cookie, очередей, кэша и межсервисного обмена.
seal() сериализует значение, кодирует в base64 и добавляет HMAC-подпись:
результат — строка подпись.нагрузка. unseal() пересчитывает подпись и сравнивает
её константным временем (hash_equals) до десериализации — подделанные и
усечённые данные отклоняются, не доходя до разбора. Ключ должен быть не короче
32 байт. По умолчанию базовый формат — PHP с анти-POP: даже при
утечке ключа подпись не превращается в RCE.
use CloudCastle\Serialize\Serializer;
$signed = Serializer::signed($secretKey); // ключ ≥ 32 байт
$sealed = $signed->seal(['user_id' => 5, 'role' => 'admin']);
$signed->unseal($sealed); // ['user_id' => 5, ...]
$signed->unseal($tampered); // ← InvalidSignatureException
// Поверх JSON — для читаемой межсервисной нагрузки
Serializer::signed($secretKey, Serializer::json());- Готовая защита целостности — без ручного кода
hash_hmacв каждом месте. - Сравнение константным временем исключает тайминговые атаки на подпись.
- Подпись проверяется до десериализации — подделка не доходит до разбора.
- Работает поверх любого формата (php/json/igbinary).
- Требование ключа ≥ 32 байт защищает от слабых ключей на этапе конструктора.
- Подпись не шифрует данные — она подтверждает целостность, но не конфиденциальность. Для секретов комбинируйте с шифрованием на транспортном уровне.
- Cookie/токены состояния, задачи очередей, кэш с внешним хранилищем.
- Хранить ключ в секрет-хранилище, не в коде; ротировать при компрометации.
- Хранить чувствительные данные в подписанной, но незашифрованной нагрузке (подпись ≠ шифрование).
- Короткий/предсказуемый ключ — HMAC вырождается; пакет отвергает ключи < 32 байт.
CloudCastle Serialize · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)