PHP တွင် XML ဖိုင်များကို PHP တွင်ထုတ်လုပ်သည့်အခါ xml_set_external_entity_Ref_handler နှင့် LibxMl_Disable_entity_entity_entity_Ender_Eplate_Oxter သည်ပြင်ပအဖွဲ့အစည်းများကိုကိုင်တွယ်ရန်နှင့်ပြင်ပအဖွဲ့အစည်းများကိုကိုင်တွယ်ရန်အသုံးပြုသောအသုံးများသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ သို့သော်နှစ် ဦး စလုံးအသုံးပြုခြင်းသည်အထူးသဖြင့်ပြင်ပ DTDs နှင့်ပါ 0 င်သည့် XML (စာရွက်စာတမ်းအမျိုးအစားခွဲခြားချက်များ) နှင့်အဖွဲ့အစည်းများနှင့်အတူကိုင်တွယ်ရာတွင်နှစ် ဦး စလုံးကိုအသုံးချနိုင်သည့်ပြ issues နာအချို့ကိုဖြစ်စေနိုင်သည်။ ဤဆောင်းပါးသည်ဤပြ problems နာများ၏ရင်းမြစ်အကြောင်းရင်းများကိုလေ့လာပြီးဖြေရှင်းနည်းများပေးလိမ့်မည်။
XML_SET_EXTARTAN_ENTATITY_REF_HANDER ဆိုသည်မှာ PHP function ဖြစ်သည်။ DTD ဖိုင်များ, အခြား XML ဖိုင်များသို့မဟုတ်စာသားဖိုင်များကဲ့သို့သော XML စာရွက်စာတမ်းများတွင်ပြင်ပအရင်းအမြစ်များကိုမိတ်ဆက်ပေးရန်ပြင်ပအဖွဲ့အစည်းများကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။
xml_set_external_entity_efandler က xml_set_external_entity_Efder ကသင်သတ်မှတ်ထားတဲ့ callback function ကိုခေါ်ယူပြီး,
LibxMl_Disable_entity_entity_Empploader သည် XML parser ကိုပြင်ပအဖွဲ့အစည်းများတင်ရန်ပိတ်ထားသည့်နောက်ထပ် PHP function ဖြစ်သည်။ ဤလုပ်ဆောင်ချက်သည်ပုံမှန်အားဖြင့် XML ပြင်ပ Entity Injection Attack တိုက်ခိုက်မှု (XXE တိုက်ခိုက်မှုများ) ကိုကာကွယ်ရန်အတွက်အသုံးပြုလေ့ရှိသည်။ ပြင်ပအဖွဲ့အစည်းများတင်ခြင်းကိုပိတ်ခြင်းအားဖြင့် XML Parser သည်ပြင်ပအရင်းအမြစ်များမှအထိခိုက်မခံသောသတင်းအချက်အလက်များကိုမတော်တဆမရရှိနိုင်ကြောင်းသေချာစေနိုင်သည်။
ဒီလုပ်ဆောင်ချက်နှစ်ခုရဲ့လုပ်ဆောင်ချက်တွေဟာဆီလျှော်မှုမရှိဘူး, XML_SEST_EXTARTAN_ENTATITATITER_REF_Handler သည် ပြင်ပ အဖွဲ့အစည်းများတင်ဆောင်နိုင်မည်ဟုမျှော်လင့်သည်။ Entity Loading ကိုပိတ်ထားသည့်အခါ XML_SET_ENTATITATIAN_ENTITITATITER_REF_Handler ၏ callback function ကိုအစပျိုး။ မရပါ။
ဤသည်နှစ်ခုအကြားလိုက်ဖက်တဲ့ပြ issues နာတွေကို ဦး ဆောင်သည်။ Entity Loading ကိုပိတ်ပြီးနောက်ပြင်ပ Entity ကိုးကားချက်များကိုကိုင်တွယ်ရန် XML_set_external_Ef_Ref_handler ကို သင်အသုံးပြုလိုပါကအထူးအစီအမံအချို့ကိုယူရန်လိုအပ်သည်။
xml_set_external_entity_entity_Ref_handler က libxml_disable_entity_entity_Ementity_Oploader နဲ့သဟဇာတဖြစ်အောင်လုပ်ဖို့, အောက်ပါနည်းလမ်းတွေကိုယူနိုင်တယ်။
အသုံးအများဆုံးအလေ့အကျင့်မှာ XXE တိုက်ခိုက်မှုများကိုကာကွယ်ရန်ပြင်ပအဖွဲ့အစည်းတင်ခြင်းကိုပိတ်ထားရန်မှာ XXE တိုက်ခိုက်မှုများကိုကာကွယ်ရန်အတွက် XML_SESS_External_entity_entity_Ref_handler ကို အသုံးပြု. XML_EsST_EXTAL_ENTIAN_ENCAL_ENTATITY_ENF_Handler ကိုလည်းအသုံးပြုသည်။ ၎င်းကိုအောင်မြင်ရန်အောက်ပါကုဒ်ကိုသုံးနိုင်သည်။
<span><span><span class="hljs-comment">// ပြင်ပ Entity Loading ကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">libxml_disable_entity_loader</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// ပြင်ပ Entity Reference Processing processing function ကိုတည်ဆောက်ခြင်း</span></span><span>
</span><span><span class="hljs-title function_ invoke__">xml_set_external_entity_ref_handler</span></span><span>(function (</span><span><span class="hljs-variable">$entity</span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-variable">$public</span></span><span>) {
</span><span><span class="hljs-comment">// ပြင်ပ Entity ကိုးကားကိုင်တွယ်</span></span><span>
</span><span><span class="hljs-comment">// ဥပမာအားဖြင့်, ဒေသခံဖိုင်များသို့မဟုတ်ဒေတာဘေ့စ်များမှအဖွဲ့အစည်းများတင်ခြင်း</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">'/path/to/your/local/entity'</span></span><span>;
});
</span><span><span class="hljs-comment">// သုံးသပ်ကြည့်ရှုခြင်း XML</span></span><span>
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_file</span></span><span>(</span><span><span class="hljs-string">'yourfile.xml'</span></span><span>);
</span></span>
ဤနည်းအားဖြင့် libxml_disable_entity_entity_Eml_set_external_entity_Ef_Ref_ref_ref_ref_ref_ref_ref_ref_handler ကို Processing ကိုစိတ်ကြိုက်ပြုလုပ်နိုင်သည်။
အချို့သောအခြေအနေများတွင်ပြင်ပအဖွဲ့အစည်းများကို 0 င်ရောက်ခွင့်ပြုရန်လိုအပ်ပါကသီးခြားထုတ်လုပ်မှုအဆင့်တွင် Entity loading ကိုယာယီဖွင့်နိုင်သည်။ XML ကိုခွဲခြမ်းစိတ်ဖြာခြင်းမပြုမီနှင့်ပြီးနောက် entity loading ကိုအတိအလင်း enable သို့မဟုတ် disable လုပ်နိုင်သည်။
<span><span><span class="hljs-comment">// ပြင်ပ Entity Loading ကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">libxml_disable_entity_loader</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// သုံးသပ်ကြည့်ရှုခြင်း XML</span></span><span>
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_file</span></span><span>(</span><span><span class="hljs-string">'yourfile.xml'</span></span><span>);
</span><span><span class="hljs-comment">// ပြင်ပအဖွဲ့အစည်းများအားသတ်သတ်မှတ်မှတ်အခိုက်အနေဖြင့်တင်ရန်ခွင့်ပြုပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">libxml_disable_entity_loader</span></span><span>(</span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-comment">// အခြားစစ်ဆင်ရေးနှင့်အတူဆက်လက်</span></span><span>
</span></span>
ဤချဉ်းကပ်မှုသည်ပြင်ပအဖွဲ့အစည်းများတင်ဆောင်လာသောအခါလုံခြုံရေးပြ issues နာများကိုရှောင်ရှားနိုင်သည့်အခါပြင်ပအဖွဲ့အစည်းများတင်ဆောင်လာသောအခါပိုမိုကောင်းမွန်သောထိန်းချုပ်မှုကိုခွင့်ပြုသည်။
အကယ်. သင်သည်ပြင်ပအဖွဲ့အစည်းကို 0 န်ဆောင်မှုပေးခြင်းမပြုလိုသော်လည်းလုံခြုံရေးပြ issues နာများကိုရှောင်ရှားလိုပါက Xml_set_external_entity_Ref_heenttler callback function အတွင်းလုံခြုံရေးစစ်ဆေးမှုများကိုသင်အကောင်အထည်ဖော်နိုင်သည်။ ဥပမာအားဖြင့်, ပြင်ပအဖွဲ့အစည်း၏ URI သည်ယုံကြည်စိတ်ချရမှုရှိ,
<span><span><span class="hljs-comment">// ပြင်ပ Entity Reference Processing processing function ကိုတည်ဆောက်ခြင်း</span></span><span>
</span><span><span class="hljs-title function_ invoke__">xml_set_external_entity_ref_handler</span></span><span>(function (</span><span><span class="hljs-variable">$entity</span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-variable">$public</span></span><span>) {
</span><span><span class="hljs-comment">// ဘေးကင်းလုံခြုံမှုစစ်ဆေးခြင်း,စိတ်မချရသောအဖွဲ့အစည်းများကိုမတင်ကြောင်းသေချာပါစေ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-string">'trusted-path'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">''</span></span><span>; </span><span><span class="hljs-comment">// Entity ကိုမတင်ကြောင်းညွှန်ပြရန်အချည်းနှီးသော string ကိုပြန်သွားပါ</span></span><span>
}
</span><span><span class="hljs-comment">// ယုံကြည်ရသောပြင်ပအဖွဲ့အစည်းများကိုင်တွယ်</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">'/path/to/your/trusted/entity'</span></span><span>;
});
</span><span><span class="hljs-comment">// သုံးသပ်ကြည့်ရှုခြင်း XML</span></span><span>
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_file</span></span><span>(</span><span><span class="hljs-string">'yourfile.xml'</span></span><span>);
</span></span>
ဤချဉ်းကပ်မှုသည်ပြင်ပအဖွဲ့အစည်းများကို 0 န်ဆောင်မှုပေးရန်ခွင့်ပြုနေစဉ်မည်သည့်အဖွဲ့အစည်းများတင်ဆောင်နိုင်သည့်အဖွဲ့အစည်းများကို 0 င်ရောက်နိုင်သည်ကိုထိန်းချုပ်ရန်ခွင့်ပြုသည်။
PHP တွင် xml_set_external_entity_Ref_handler နှင့် libxml_disable_entity_Ender_Ef_handler_entity_Emxml_disable_entity_Emptity _loader_Emity_Emptity မှာမတူညီတဲ့ရည်ရွယ်ချက်ရှိတယ်။ ကျိုးကြောင်းဆီလျော်သော configuration နှင့် code addression မှတဆင့်ဤလုပ်ဆောင်ချက်နှစ်ခုသည်ပြင်ပအဖွဲ့အစည်း၏ကိုးကားစရာလုပ်ငန်း၏လိုအပ်ချက်များကိုဖြည့်ဆည်းပေးနိုင်ရန်နှင့်ပြင်ပအဖွဲ့အစည်း၏တင်ဆောင်လာသောလုံခြုံရေးအန္တရာယ်များကိုရှောင်ရှားနိုင်သည်။ မှန်ကန်သောဖြေရှင်းနည်းကိုရွေးချယ်ခြင်းသည်သင်၏သီးခြားလိုအပ်ချက်များနှင့်လုံခြုံရေးလိုအပ်ချက်များပေါ်တွင်မူတည်သည်။