<? phpukraine ІНСТРУМЕНТИ
Пошук по платформі

PHP serialize і unserialize онлайн

Розбирає рядок serialize у читабельну структуру й збирає назад. Обʼєкти не створюються.

У БРАУЗЕРІ ТЕКСТ → ТЕКСТ
РОБОЧА ЗОНА
ЩО РОБИТЬ

Читає дамп serialize, який неможливо прочитати очима

Рядок на кілька кілобайт із вкладеними масивами й порахованими довжинами байтів не читається, саме тому цей інструмент існує. Вставляєте значення з колонки бази чи з сесії, отримуєте нормальну структуру PHP-масиву. Працює і у зворотний бік: збирає serialize із коду масиву.

ЯК ЦЕ ПРАЦЮЄ В PHP

serialize() перетворює значення в рядок, де записані тип, довжина і саме значення кожного елемента: s:5:"hello" це рядок довжиною пʼять байтів. Довжина в байтах, а не символах, тому «привіт» дасть s:12, і саме тут ламаються дампи після зміни кодування.

$data = ['id' => 427, 'tags' => ['php', 'laravel']];

$packed = serialize($data);
// a:2:{s:2:"id";i:427;s:4:"tags";a:2:{i:0;s:3:"php";i:1;s:7:"laravel";}}

// ВАЖЛИВО: завжди забороняйте класи для чужих даних
$back = unserialize($packed, ['allowed_classes' => false]);
ОБЕРЕЖНО

unserialize() без allowed_classes створює обʼєкти з рядка й викликає їхні магічні методи: це класичний вектор RCE. Цей інструмент завжди працює в режимі allowed_classes: false, і у вашому коді для будь-яких зовнішніх даних має бути так само. Для даних із мережі краще json_decode.

ПИТАННЯ

Що питають про цей інструмент

Найчастіша причина: довжини байтів не збігаються зі вмістом. Так буває, коли дамп проходив через редактор, який змінив кодування або переноси рядків, або коли рядок обрізала колонка бази. Інструмент показує позицію байта, де структура зламалась; дивіться, що стоїть перед нею.

ДАЛІ ПО ТЕМІ