
快取為什麼不該存物件?從 PHP 到 Java、Python 的反序列化問題
把物件存進 Redis 快取,讀出來可能壞掉,也可能被反序列化攻擊。從 PHP 的 serialize() 出發,對照 Java、Python pickle、Ruby Marshal,說明快取為什麼只該存陣列、字串這類純資料。

把物件存進 Redis 快取,讀出來可能壞掉,也可能被反序列化攻擊。從 PHP 的 serialize() 出發,對照 Java、Python pickle、Ruby Marshal,說明快取為什麼只該存陣列、字串這類純資料。

升級 Laravel 13 後,Redis 快取讀出來變成 __PHP_Incomplete_Class。原因是 cache.php 新增的 serializable_classes 預設為 false,加上快取裡存了物件;說明怎麼找出來、怎麼改成只存陣列,以及過渡用的白名單。