ကျယ်ပြန့်စွာအသုံးပြုသောဆာဗာဘေးထွက်ပရိုဂရမ်ဘာသာစကားအရ PHP သည် Web Development တွင်အရေးကြီးသောရာထူးတစ်ခုရှိသည်။ PHP applications များပိုမိုများပြားလာသည်နှင့်အမျှအင်တာနက်နှင့်ထိတွေ့မှုများပိုမိုများပြားလာသည်နှင့်အမျှလုံခြုံရေးပြ issues နာများသည်တဖြည်းဖြည်း developer များအပေါ်အာရုံစူးစိုက်လာနေသည်။ PHP တွင် Serialize () နှင့် unalialize () လုပ်ဆောင်ချက်များကို 0 င်ရောက်ခြင်းနှင့်အရာဝတ်ထုများကို deserialization ကိုကိုင်တွယ်ရန်အသုံးပြုသည်။ သို့သော်ဤလုပ်ဆောင်ချက်များသည်တိုက်ခိုက်သူများအတွက် "အရာဝတ်ထုဆေးထိုးတိုက်ခိုက်မှုများ" ပြုလုပ်ရန်တိုက်ခိုက်သူများအတွက်အားနည်းချက်များကိုဖြစ်စေနိုင်သည်။ မတားဆီးပါကတိုက်ခိုက်သူသည် application ၏အပြုအမူကိုဂရုတစိုက်တည်ဆောက်ထားသည့်အချက်အလက်များကိုဖြတ်သန်းခြင်းဖြင့်ပြောင်းလဲခြင်းကိုပြောင်းလဲစေပြီးဝေးလံခေါင်သီသော Code Execute (RCe) ကဲ့သို့သောကြီးမားသောလုံခြုံရေးပြ issues နာများကိုပင် ဦး ဆောင်နိုင်သည်။
ဤဆောင်းပါးသည် PHP တွင်လုံခြုံရေးပြ issues နာများကို serialize ၏လုံခြုံရေးပြ issues နာများကို ခွဲခြမ်းစိတ်ဖြာ ပါလိမ့်မည်။
perialize () နှင့် unserialize () သည် PHP တွင်ပါ 0 င်ခြင်းနှင့် array Serialization နှင့် deserialization အတွက်အရေးကြီးသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။
Serialize () - PHP variable များကို (အရာဝတ်ထုများ, arrays စသည်တို့အပါအ 0 င်) သိုလှောင်ထားသည့်ကြိုးများထဲသို့ပြောင်းလဲစေသည်။ ဥပမာအားဖြင့်, သင်သည်အရာဝတ်ထုတစ်ခုသို့မဟုတ် array ကို string တစ်ခုထဲသို့ပြောင်းလဲပြီးဒေတာဘေ့စ်တွင်သိမ်းဆည်းနိုင်သည်။
unserialize () - PHP ၏မူလဒေတာအမျိုးအစား (ဥပမာအားဖြင့်အရာဝတ်ထုတစ်ခုသို့မဟုတ်ခင်းကျင်းခြင်းကဲ့သို့သော) ကိုခေါ်ယူရန် serialized string ကိုပြန်လည်စစ်ဆေးရန်ဖြစ်သည်။
$data = ['name' => 'John', 'age' => 30];
$serializedData = serialize($data);
echo $serializedData; // ထုတ်လုပ်ခြင်း:a:2:{s:4:"name";s:4:"John";s:3:"age";i:30;}
အထက်ပါကုဒ်သည် array $ ဒေတာကို string တစ်ခုထဲသို့ခေါ်ဆောင်သွားသည်။ ၎င်းကိုဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားပါကနောက်ပိုင်းတွင်၎င်းကိုနောက်ပိုင်းတွင် မဖော်ပြထားသောမူရင်းခင်းကျင်းမှုသို့ပြန်ယူနိုင်သည်။
Object Into Inchement Attack သည်အထူး Serial ဒေတာများကိုတည်ဆောက်သောတိုက်ခိုက်သူအား အထူး သဖြင့်အချက်အလက်များကိုတည်ဆောက်ခြင်းကိုရည်ညွှန်းသည်။ PHP applications များသည် input data ကိုအပြည့်အဝမစစ်ဆေးသောအခါဤတိုက်ခိုက်မှုအမျိုးအစားသည်များသောအားဖြင့်ဖြစ်သည်။
ဥပမာအားဖြင့်တိုက်ခိုက်သူသည်အောက်ပါအန္တရာယ်ရှိသောအချက်အလက်များကိုတည်ဆောက်သည်ဆိုပါစို့။
$maliciousData = 'O:8:"UserClass":1:{s:4:"name";s:4:"evil";}';
unserialize($maliciousData);
၎င်းတို့အနက် userblass သည်လျှောက်လွှာတွင်အတန်းတစ်ခုဖြစ်သည်။ အဆိုပါတိုက်ခိုက်သူသည် serialized data များမှတဆင့်အန္တရာယ်ရှိသောအရာဝတ်ထုကိုဖန်တီးပေးပြီး အတည်မပြုနိုင်သော () function ကိုဖြတ်သန်းခြင်းကိုအတည်ပြုခြင်းမရှိဘဲအရာဝတ်ထု၏ဆောက်လုပ်ရေးလုပ်ငန်းကိုဖြစ်ပေါ်စေပြီးလုံခြုံရေးအားနည်းချက်များကိုဖြစ်ပေါ်စေနိုင်သည်။
အရာဝတ်ထုဆေးထိုးတိုက်ခိုက်မှုများကိုကာကွယ်ရန် developer များသည်အောက်ပါထိရောက်သောတိုင်းတာမှုများပြုလုပ်နိုင်သည်။
deserialization လုပ်ငန်းစဉ်အတွင်း unserialize () function သည်အချက်အလက်များပါ 0 င်ပါကအတန်းကိုဖွင့်ရန်ကြိုးစားလိမ့်မည်။ အကယ်. စာသင်ခန်းသည်လျှောက်လွှာတွင်သင့်တော်သောလုံခြုံရေးအစီအမံများမပါဘဲတည်ရှိပါကအန္တရာယ်ရှိသောအရာဝတ်ထုများကို ဖန်တီး. ကွပ်မျက်ခံရနိုင်သည်။ ထို့ကြောင့် deserialization စဉ်အတွင်းတင်ဆောင်ခွင့်ကိုခွင့်ပြုထားသောအတန်းများကို မဖော်ပြနိုင်သော () '' Say_classes Parameter သည်သာကန့်သတ်နိုင်သည်။
$data = 'O:8:"UserClass":1:{s:4:"name";s:4:"evil";}';
$unserializedData = unserialize($data, ['allowed_classes' => ['UserClass']]);
အကယ်. အတန်းအစားအမည်ကိုအတိအလင်းဖော်ပြထားခြင်းမရှိပါကဘ 0 သည်မသိသောအတန်းအမည်များပါ 0 င်သောအချက်အလက်များကို deserialization ကိုခွင့်မပြုပါ။
မကောင်းသောအကြောင်းအရာများမပါ 0 င်စေရန်အတွက် 0 င်လာသော serialized အချက်အလက်များကိုအတိအကျစစ်ဆေးပြီး filterify လုပ်ပါ။ ဒေတာကိုလက်ခံခြင်းမပြုမီ, serialized string ၏ဖွဲ့စည်းပုံသည်တရားဝင်မရှိမရှိစစ်ဆေးရန်ပုံမှန်အသုံးအနှုန်းများသို့မဟုတ်အခြားနည်းလမ်းများကိုသင်အသုံးပြုနိုင်သည်။
if (preg_match('/^[O|a|s|i|d|b|f|N|r|C|l|n]/', $inputData)) {
$unserializedData = unserialize($inputData);
} else {
die('Invalid serialized data');
}
အထူးလိုအပ်ချက်များမရှိပါက json_encode () နှင့် JSONS_Decode () နှင့် JSONS_Decode () ကိုအသုံးပြုခြင်းကိုအသုံးပြုရန်အကြံပြုသည်။ JSOR_CECDEDDODED () နှင့် JSON_Decode () သည်အရာဝတ်ထုဆေးထိုးတိုက်ခိုက်မှုများအတွက်အလွယ်တကူအသုံးချခြင်းမရှိသောကြောင့်ရိုးရှင်းသောဒေတာအမျိုးအစားများ,
$data = json_encode($dataArray);
$decodedData = json_decode($data, true);
PHPP.INI Configuration ဖိုင်တွင် developer များ၏မတော်တဆအသုံးပြုမှုကိုရှောင်ရှားရန်သတ်သတ်မှတ်မှတ်လုပ်ဆောင်ချက်များကိုပိတ်ခြင်းဖြင့်လုံခြုံရေးကိုတိုးမြှင့်နိုင်သည်။ တိုက်ခိုက်သူများအားလုံခြုံရေးအားနည်းချက်များမှကာကွယ်ရန် () သည်မအောင်မြင်သော () မှလွဲ. ၎င်းတို့ကို မအောင်မြင်သော () function ကို disable လုပ်နိုင်သည် (သို့) ယုံကြည်စိတ်ချရသောအကွာအဝေးသို့ကန့်သတ်နိုင်သည်။
disable_functions = "unserialize"
PHPT အသိုင်းအဝိုင်းသည်လုံခြုံရေးအားနည်းချက်များကိုဖြေရှင်းရန်နောက်ဆုံးသတင်းများနှင့်လုံခြုံရေးပြင်ဆင်မှုများကိုပုံမှန်ဖြန့်ချိသည်။ developer များကနောက်ဆုံးပေါ် PHP ဗားရှင်းကိုအမြဲတမ်းအသုံးပြုသင့်ပြီးလုံခြုံရေးကိုသေချာစေရန်စနစ်ကိုအချိန်မီမွမ်းမံသင့်သည်။
Serialize ( ) လုပ်ဆောင်ချက်များကိုတိုက်ရိုက်ကာကွယ်ခြင်းအပြင် developer များသည်အထိခိုက်မခံသောအချက်အလက်များကိုလုံခြုံရေးစီမံခန့်ခွဲမှုများကိုပိုမိုကောင်းမွန်စေရန်လိုအပ်သည်။ လုံခြုံရေးအကောင်းဆုံးအလေ့အကျင့်အချို့ကိုဤတွင်ဖော်ပြထားသည်။
စာဝှက်ထားတဲ့အထိခိုက်မခံတဲ့ဒေတာ - အထိခိုက်မခံတဲ့ဒေတာတွေအတွက်သိမ်းဆည်းထားတဲ့အထိခိုက်မခံတဲ့ဒေတာတွေအတွက် encryption algorithms ကို encryption algorithms ကိုသုံးပြီးတိုက်ခိုက်သူကအချက်အလက်တွေကိုရရှိနေသေးရင်တောင်အလွယ်တကူအက်ကွဲနိုင်မှာမဟုတ်ဘူး။
Input Verification : URLs များ, ပုံစံများ, SQL Injection, XSS နှင့် CSRF ကဲ့သို့သောဘုံတိုက်ခိုက်မှုများကိုကာကွယ်ရန်ရှိပြီးသားစာကြည့်တိုက်များကို အသုံးပြု. လက်ရှိစာကြည့်တိုက်များကိုအသုံးပြုနိုင်သည်။
အရာဝတ်ထုထိတွေ့မှုကိုအနည်းဆုံးဖြစ်အောင် လုပ်ပါ။ Serialize လုပ်ရန်လိုအပ်သည့်အချက်အလက်များတွင်လိုအပ်သောသတင်းအချက်အလက်များကိုသာပါ 0 င်သင့်သည်။
PHP မှ Serialize () နှင့် unserialize () လုပ်ဆောင်ချက်များကိုအဆင်ပြေသောဒေတာသိုလှောင်မှုနှင့်ဂီယာထုတ်လွှင့်မှုယန္တရားများဖြင့် developer များပေးသော်လည်း၎င်းတို့အားကန့်သတ်ချက်များမရှိဘဲအသုံးပြုခြင်းသည်လုံခြုံရေးအန္တရာယ်များကိုဖြစ်စေနိုင်သည်။ ကျိုးကြောင်းဆီလျော်သော configuration များဖြင့် PHP ဗားရှင်းများ၏ 0 င်ငွေအတည်ပြုခြင်း,
အရေးအကြီးဆုံးအရာကတော့ - အသုံးပြုသူ input ကိုဘယ်တော့မှမယုံပါနဲ့။ အကျိုးသင့်အကြောင်းသင့်ရှိသောလုံခြုံရေးနည်းဗျူဟာများနှင့်အကာအကွယ်ပေးမှုများသည်လျှောက်လွှာများ၏လုံခြုံရေးကိုထိရောက်စွာတိုးတက်စေပြီးအလားအလာရှိသောအန္တရာယ်များကိုလျော့နည်းစေသည်။