Modern Web Development တွင် XML ကိုဒေတာဖလှယ်ခြင်း, configuration files များနှင့်အခြားအခြေအနေများတွင်ကျယ်ပြန့်စွာအသုံးပြုသည်။ သို့သော် XML ခွဲခြမ်းစိတ်ဖူးနေစဉ်အတွင်းကာကွယ်ခြင်းမပြုပါက၎င်းသည်ပြင်ပအဖွဲ့အစည်း၏တိုက်ခိုက်မှုများအတွက်အားနည်းချက်တစ်ခုဖြစ်လာနိုင်သည်။ XXE Attack ဆိုသည်မှာ XML ဖိုင်များမှတစ်ဆင့်အန္တရာယ်ရှိသောအကြောင်းအရာများကိုပိုမိုဆိုးဝါးသောအကြောင်းအရာများကိုထိုးနှက်ခြင်း, သတင်းအချက်အလက်ယိုစိမ့်မှု,
ဤပြ problem နာကိုဖြေရှင်းရန် PHP သည်ပြင်ပအဖွဲ့အစည်း၏တိုက်ခိုက်မှုများကိုကာကွယ်ရန် built-in functions အချို့ကိုထောက်ပံ့ပေးသည်။ သူတို့ထဲမှ LibxMl_use_internal_Eruor () နှင့် libxml_disable_entity_entity_Ementity_Ementity_Ementity_Ementity_Ementity_Ementity_Ementity_Ementity_Ementity_Ementity_Emptity_Ementity () သည်အလွန်ထိရောက်သောအကာအကွယ်နည်းလမ်းနှစ်ခုဖြစ်သည်။ ပြင်ပအဖွဲ့အစည်းဆိုင်ရာတိုက်ခိုက်မှုများကိုကာကွယ်ရန်ဤဆောင်းပါးနှစ်ခုကိုမည်သို့ပေါင်းစပ်ရမည်ကိုဤဆောင်းပါးတွင်အသေးစိတ်ရှင်းပြပါမည်။
ပြင်ပ Entity Attack (XXE) သည် XML ဖိုင်တွင်ပြင်ပအဖွဲ့အစည်းဆိုင်ရာကြေငြာချက်တစ်ခုဖြင့်ပြုလုပ်သောတိုက်ခိုက်မှုတစ်ခုဖြစ်သည်။ XML ဖိုင်များသည် system file များ, URLs များသို့မဟုတ်အခြားပြင်ပအရင်းအမြစ်များဖြစ်သောပြင်ပအရင်းအမြစ်များကိုရည်ညွှန်းနိုင်သည်။ တိုက်ခိုက်သူသည်ဖိုင်အမျိုးအစားကိုအထိခိုက်မခံသောသတင်းအချက်အလက်များကိုညွှန်ပြနိုင်သည်သို့မဟုတ်ဆာဗာသည်အန္တရာယ်ရှိသော XML ဖိုင်ကိုမလုံခြုံသောလုပ်ငန်းများကိုလုပ်ဆောင်နိုင်သည်။
ဥပမာအားဖြင့်တိုက်ခိုက်သူသည် XML ဖိုင်ကိုအောက်ပါပုံစံဖြင့်တည်ဆောက်နိုင်သည်။
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<data>&xxe;</data>
</root>
ဤအချိန်တွင် XML Parser သည် System ၏ / etc / passwd ဖိုင်ကိုဖတ်ရန်နှင့်၎င်း၏အကြောင်းအရာများကို ဒေတာ ဒြပ်စင်သို့ထည့်သွင်းရန်ကြိုးစားသည်။ ထိုသို့သောတိုက်ခိုက်မှုများသည်အထိခိုက်မခံသောအချက်အလက်ချိုးဖောက်မှုများဖြစ်ပေါ်စေနိုင်သည်။
XML ဒေတာများကိုပြုပြင်သည့်အခါ PHP သည်ပုံမှန်အားဖြင့်အမှားတစ်ခုဖြစ်သည့်အမှားတစ်ခုဖြစ်သည့်အခါ PHP သည်သတိပေးချက်သို့မဟုတ်အမှားတစ်ခုဖြစ်စေပြီးအမှားအယွင်းများကိုဖော်ထုတ်နိုင်သည်။ LibxMl_use_internal_Eruor () ကို သုံးပါ () ဤအမှားရလဒ်များကိုပိတ်ထားရန်နှင့်အတွင်းပိုင်းအမှားကိုင်တွယ်သည့်ယန္တရားများကိုအသုံးပြုပါ။ ဤနည်းအားဖြင့် XML ဒေတာသည်မမှန်ကန်ပါကသို့မဟုတ်အားနည်းချက်ရှိလျှင်ပင်အစီအစဉ်သည်အသေးစိတ်အမှားအချက်အလက်များကိုဖော်ထုတ်လိမ့်မည်မဟုတ်ပါ။
libxml_use_internal_errors(true);
$xmlString = '<root><data>&xxe;</data></root>';
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
echo "ဝန်တင် XML အမှားတစ်ခုဖြစ်ပွားခဲ့သည်。\n";
foreach(libxml_get_errors() as $error) {
echo $error->message . "\n";
}
}
ဤဥပမာတွင် LibxMl_use_internal_Eruor (Trust) သည် XML ဖိုင်နှင့်ပြ a နာရှိလျှင်အစီအစဉ်သည်သတိပေးချက်မထားကြောင်းသေချာစေသည်။ အမှားမက်ဆေ့ခ်ျကိုပြည်တွင်း၌သိမ်းဆည်းထားပြီး LibxMl_get_Eruor မှတဆင့်ရရှိသောရနိုင်သည်။
libxml_disable_entity_Ementity_loader () သည် developer များက XML Parser ၏ပြင်ပအဖွဲ့အစည်း၏ 0 င်ခွင့်လုပ်ငန်းကိုပိတ်ထားရန်ခွင့်ပြုသည့်နောက်ထပ်အဓိကလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ အကယ်. ပြင်ပအဖွဲ့အစည်း၏ 0 န်ဆောင်မှုကိုပိတ်ထားပါက XML parser သည်ဝေးလံခေါင်သီသောအရင်းအမြစ်များသို့မဟုတ် system files များကို load လုပ်နိုင်မည်မဟုတ်ပါ။
libxml_disable_entity_loader(true);
$xmlString = '<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<data>&xxe;</data>
</root>';
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
echo "XML ဝန်တင်失败,ပြင်ပအဖွဲ့အစည်းများအားပိတ်ထားသည်。\n";
}
ဤဥပမာတွင် LibxMl_Disable_entity_Ementity_Ementity_Ementity (trut) သည် ပြင်ပအဖွဲ့အစည်းများတင်ဆောင်လာပြီးတိုက်ခိုက်သူတစ် ဦး အား XML ဖိုင်မှတစ်ဆင့်ပြင်ပ entity activity ကြေငြာချက်တစ်ခုပါ 0 င်သည့်တိုင်ခွဲခြမ်းစိတ်ဖြာခြင်းသည်၎င်းတို့ကိုအကောင်အထည်ဖော်ရန်မဖြစ်နိုင်ပါ။
ပြင်ပအဖွဲ့အစည်းဆိုင်ရာတိုက်ခိုက်မှုများကိုထိရောက်စွာတားဆီးနိုင်ရန်အတွက်ကျွန်ုပ်တို့သည် XML ကိုခွဲခြမ်းစိတ်ဖြာသောအခါပြင်ပအဖွဲ့အစည်းကိုဖိနှိပ်နိုင်သည့်အပြင်ပြင်ပ Entity loading ကိုပိတ်ထားရန်ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်။ အသုံးပြုနိုင်သည်။
libxml_use_internal_errors(true);
libxml_disable_entity_loader(true);
$xmlString = '<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<data>&xxe;</data>
</root>';
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
echo "XML ဝန်တင်失败。\n";
foreach(libxml_get_errors() as $error) {
echo $error->message . "\n";
}
}
ဒီဥပမာမှာ LibxMl_use_internal_Errors (True) ကို ခွဲခြမ်းစိတ်ဖြာ နေစဉ်အတွင်းအမှားအယွင်းများကိုဖုံးကွယ်ထားရန်အသုံးပြုသည်။ XML ဖိုင်တွင်ပြင်ပအဖွဲ့အစည်းများပါ 0 င်ပါက၎င်းသည်အထိခိုက်မခံသောသတင်းအချက်အလက်များကိုယိုစိမ့်မှုသို့မဟုတ်အန္တရာယ်ရှိသောလုပ်ဆောင်မှုများဖြစ်ပေါ်စေမည်မဟုတ်ပါ။
ပြင်ပ Entity Attack (XXE) သည်မသင့်လျော်သောကိုင်တွယ်မှုများတွင်ကြီးမားသောလုံခြုံရေးပြ issues နာများကိုဖြစ်ပေါ်စေနိုင်သောအန္တရာယ်ရှိသောအားနည်းချက်အမျိုးအစားတစ်ခုဖြစ်သည်။ ထိုကဲ့သို့သောတိုက်ခိုက်မှုများကိုထိရောက်စွာကာကွယ်ရန် PHP သည် libxml_use_use_internal_Eruor () နှင့် libxml_disable_entity_entity_entity_Ementity_Ementity () နှင့် LibxMl_disable_entity_entity_Ementity ()) developer များ parsing နှင့် external entity our entity ourmenting ကိုထိန်းချုပ်ရန်ကူညီနိုင်သည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်ခြင်းအားဖြင့် PHP application များ၏လုံခြုံရေးကိုသိသိသာသာတိုးတက်အောင်လုပ်နိုင်သည်နှင့်ပြင်ပအဖွဲ့အစည်းများ၏တိုက်ခိုက်မှုကိုရှောင်ရှားနိုင်သည်။