شرح صفوف ومحتوى الفقرة
لا تمرر أبداً بيانات خارجية غير موثوقة إلى unserialize() دون تقييد الخيار allowed_classes، لمنع ثغرات حقن الكائنات (PHP Object Injection).
- مرّر الخيار
['allowed_classes' => [SafeDto::class]]كمعامل ثانٍ للدالةunserialize()لحصر فك التسلسل في الأصناف المسموحة فقط. - مرّر
['allowed_classes' => false]لمنع إنشاء أي كائنات إطلاقاً، فيتحول أي كائن غير مصرح به إلى__PHP_Incomplete_Classغير قابل للتنفيذ. - عند تبادل البيانات مع المتصفح أو الكوكيز أو واجهات API الخارجية، استخدم
json_encode()وjson_decode()بدلاً منserialize().
لأن الصنف DangerExec غير موجود في القائمة البيضاء allowed_classes، يرفض PHP إنشاءه ويحوله إلى __PHP_Incomplete_Class آمن.
PHP
<?php
class SafeCart { public string $sku = "KB-90"; }
class DangerExec { public string $cmd = "rm"; }
$payload = serialize(new DangerExec());
$res = unserialize($payload, ["allowed_classes" => [SafeCart::class]]);
echo get_debug_type($res) . "\n";