PHP တွင် Serialize နှင့် unserialize function များကိုများသောအားဖြင့် PHP variable များကို strings များနှင့်စတိုးဆိုင်များသို့ပြောင်းရွှေ့ရန်အသုံးပြုလေ့ရှိသည်။ နှစ် ဦး စလုံးသည်ဖွံ့ဖြိုးတိုးတက်မှုလုပ်ငန်းစဉ်တွင်အလွန်အသုံးဝင်သော်လည်းအခက်အခဲများရှာဖွေရန်ခက်ခဲသောအမှားအယွင်းများကိုလည်းမိတ်ဆက်ပေးနိုင်သည်။ ဤအမှားများကို debging လုပ်သည့်အခါပြ the နာကိုရှာဖွေရန်အတွက်အကြံပြုချက်များလိုအပ်သည်။ ဤဆောင်းပါးသည်အများအားဖြင့်အမှားအယွင်းများနှင့်သူတို့၏ဖြေရှင်းနည်းများကိုမိတ်ဆက်ပေးပြီးဤလုပ်ဆောင်မှုများကိုထိရောက်စွာမည်သို့ debug လုပ်နည်းကိုလမ်းညွှန်ပေးမည်နည်း။
Serialize function သည် PHP variable ကို string တစ်ခုသို့ပြောင်းလဲသည်။ ၎င်းသည် unserialize function မှတစ်ဆင့်မူလ PHP variable ကိုပြန်ယူနိုင်သည်။ အကယ် . Serialize မမှန်ကန်ပါကအချက်အလက်များသည်မမှန်ကန်ပါက,
$myData = array('name' => 'John', 'age' => 30);
$serializedData = serialize($myData);
// serialized ဒေတာနှင့်အတူကိုယ်တိုင် tamper
$serializedData = substr($serializedData, 0, 20);
$unserializedData = unserialize($serializedData);
ဒေတာသမာဓိကိုစစ်ဆေးပါ ။
မှတ်တမ်းတင် ခြင်း နှင့်မှတ်တမ်းတင်ခြင်းမှတ်တမ်းတင်ခြင်း ။
var_dump($serializedData);
အကယ်. serialized data ကိုမမျှော်လင့်ဘဲပြုပြင်မွမ်းမံပါကအချက်အလက်များ၏သမာဓိကိုမှန်ကန်စွာအတည်ပြုခြင်းနှင့်အတည်ပြုခြင်းအားဖြင့် (ထိုကဲ့သို့သော hash (သို့) checksum သုံးခြင်း) ကိုအတည်ပြုခြင်းနှင့်အတည်ပြုခြင်းဖြင့်သေချာစစ်ဆေးနိုင်သည်။
unserialize ကို အသုံးပြုသောအခါ, မမျှော်လင့်သောဒေတာအမျိုးအစားများပေါ်လာနိုင်သည်။ ဥပမာအားဖြင့်, serialized အရာဝတ်ထုသည် မလုံလောက်သည့် အခါ တရားမဝင်သော သို့မဟုတ်မမှန်ကန်သောအမျိုးအစားတန်ဖိုးကိုမှန်ကန်စွာမတင်ပါက,
class User {
public $name;
}
$serializedData = serialize(new User());
$unserializedData = unserialize($serializedData);
var_dump($unserializedData); // ဖြစ်လိမ့်မည်ဟုမျှော်လင့်ရသည် User ကန့်ကွက်,ဒါပေမယ့်ပြန်လာလိမ့်မည် NULL
Class ကိုဖွင့်သည်ကိုစစ်ဆေးပါ ။ အရာဝတ်ထုတစ်ခုကို deserializing ပြ problems နာများကိုသင်ကြုံတွေ့ရပါကသက်ဆိုင်ရာလူတန်းစားကိုတင်မနေစစ်ဆေးပါ။
class_exists () နှင့် method_exists () နှင့် method_exists () - deserialized class ကို PHP တွင်သတ်မှတ်ပြီးမှန်ကန်စွာချက်ချင်းပြုလုပ်နိုင်ပါ။
if (!class_exists('User')) {
echo "အမျိုးအစား User undefined";
} else {
$unserializedData = unserialize($serializedData);
var_dump($unserializedData);
}
deserialized အရာဝတ်ထု၏အတန်းကို SPL_Autoload_register () ကို အသုံးပြု. မှန်ကန်စွာသို့မဟုတ် dynamically loaded လုပ်ထားကြောင်းသေချာအောင်လုပ်ပါ။
PHP 5.3 နှင့်အထက်တွင်လုံခြုံရေးကိုမြှင့်တင်ရန် deserialized အတန်းများကို ကန့်သတ်ရန် အဆင်သင့် () function ၏ဒုတိယ pareter ကိုသုံးနိုင်သည်။
$unserializedData = unserialize($serializedData, ["allowed_classes" => ["User"]]);
deserialization စစ်ဆင်ရေးများတွင်လုံခြုံရေးအန္တရာယ်များရှိသည်။ တိုက်ခိုက်သူသည် serialized data များနှင့်အနှောင့်အယှက်ပေးခြင်းဖြင့်အန္တရာယ်ရှိသောကုဒ်ကိုလုပ်ဆောင်ရန်ကြိုးစားနိုင်သည်။
$maliciousData = 'O:4:"User":1:{s:4:"name";s:4:"evil";}';
$unserializedData = unserialize($maliciousData);
ဒေတာရင်းမြစ်များကိုစစ်ဆေးပါ ။ ဒေတာအရင်းအမြစ်အရင်းအမြစ်ကိုအမြဲတမ်းစစ်ဆေးပါ။
Whitelististing ယန္တရားကိုသုံးပါ ။
ခွင့်မပြုသည့်အတန်းများကိုစွန့်ခွာရန် ခွင့်ပြုထားသော uneerialize parametere () parametere ကိုသုံးပါ။
Data Descriptions ကို deservialization တိုက်ခိုက်မှုအန္တရာယ်ကိုလျှော့ချရန် Serial လွှဲပြောင်းမည့်အစားအချက်အလက်လွှဲပြောင်းမှုအတွက် JSO Format ကိုအသုံးပြုရန်စဉ်းစားပါ။
$unserializedData = unserialize($maliciousData, ["allowed_classes" => ["User"]]);
ဖွံ့ဖြိုးတိုးတက်မှုကာလအတွင်း Serialize နှင့် unserialize လုပ်ဆောင်မှုများတွင် debug ပြ problems နာများကိုကူညီရန်အသုံးပြုနိုင်သည့်ကိရိယာများနှင့်လှည့်ကွက်များရှိသည်။
Serial data များကို log file တစ်ခုထဲသို့ logging လုပ်ခြင်းအားဖြင့်တစ်ခုခုမှားယွင်းသောအခါမူရင်းအချက်အလက်များကိုပြန်လည်ကြည့်ရှုနိုင်သည်။
file_put_contents('serialize_log.txt', $serializedData . PHP_EOL, FILE_APPEND);
ဒေတာများကိုမှန်ကန်စွာလည်ပတ်နိုင်ပြီးခြွင်းချက်များမရှိသေးစေရန် serialization နှင့် deserialization-related code များအတွက်ယူနစ်စစ်ဆေးမှုများရေးရန်ရေးပါ။
public function testSerialization() {
$data = array('name' => 'John', 'age' => 30);
$serializedData = serialize($data);
$this->assertNotEmpty($serializedData);
$unserializedData = unserialize($serializedData);
$this->assertEquals($data, $unserializedData);
}
Var_Dump သည် အားကြီးသော debugging tool သည်ပြ problems နာများကိုလျင်မြန်စွာဖော်ထုတ်နိုင်အောင်ကူညီပေးနိုင်သည့်အသေးစိတ်အမျိုးအစားများနှင့်အကြောင်းအရာများကိုပြသနိုင်သည့်အစွမ်းထက် debugging tool တစ်ခုဖြစ်သည်။
var_dump($unserializedData);
အမှားအယွင်းများကို Serialize နှင့် unserialize လုပ်ဆောင်မှုများတွင်ပြ the နာကိုလေ့လာရန်လိုသည်။ အချက်အလက်များအရဒေတာပုံစံများကိုမှန်ကန်စွာဖွင့်လှစ်ထားသည်ဖြစ်စေ,
PHP တွင် Serialize နှင့် unserialize ကို ကိုင်တွယ်ရာတွင်ဤဆောင်းပါးသည်သင့်အားပိုမိုအသုံးဝင်စေရန်သင့်အားပိုမိုအသုံးဝင်စေရန်သင့်အားပိုမိုအသုံးဝင်စေရန်ကူညီပေးပါ။