PHP တွင် Shell_exec နှင့် EXE EURT လုပ်ငန်းများကိုပြင်ပ command များ (သို့) script များကိုလုပ်ဆောင်ရန်အသုံးပြုသည်။ အသုံးပြုမှုအခြေအနေများနှင့်ဤလုပ်ဆောင်မှုနှစ်ခု၏အားသာချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များကိုနားလည်ခြင်းသည်ထိရောက်သောနှင့်လုံခြုံသောကုဒ်များရေးသားခြင်းအတွက်အလွန်အရေးကြီးသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခုနှင့်၎င်းတို့၏သက်ဆိုင်သည့်အခြေအနေများနှင့်အားသာချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များအကြားကွဲပြားခြားနားမှုများကိုဤဆောင်းပါးတွင်လေ့လာသုံးသပ်လိမ့်မည်။
shell_exec :
ပြင်ပ command များကို execute လုပ်ရန်နှင့်အပြည့်အဝ output ကိုပြန်ပို့ရန် shell_exec function ကိုအသုံးပြုသည်။ ဤလုပ်ဆောင်ချက်သည် string တစ်ခုအနေဖြင့် command (stdout) ၏ပုံမှန်ထုတ်လုပ်မှုကိုပြန်ပို့သည်။ command သည် execute လုပ်ရန်ပျက်ကွက်လျှင်သို့မဟုတ် output မရှိပါက NULL ကို ပြန်ပို့သည်။
ဥပမာ -
<span><span><span class="hljs-variable">$output</span></span><span> = </span><span><span class="hljs-title function_ invoke__">shell_exec</span></span><span>(</span><span><span class="hljs-string">'ls -l'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$output</span></span><span>;
</span></span> exec :
Execution function သည်ပြင်ပ command များကို execute လုပ်ပြီးကွပ်မျက်ရလဒ်ကိုပြန်ပို့သည်။ shell_exec နှင့်မတူဘဲ Exec Function သည် command ၏ output ကို array အဖြစ်ပြန်ပို့နိုင်သည်။ command ၏ execute status ကိုလုပ်ဆောင်ရန်အသုံးပြုသော command output ၏နောက်ဆုံးလိုင်းကိုပြန်ပို့နိုင်သည်။
ဥပမာ -
<span><span><span class="hljs-variable">$output</span></span><span> = [];
</span><span><span class="hljs-variable">$return_var</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-string">'ls -l'</span></span><span>, </span><span><span class="hljs-variable">$output</span></span><span>, </span><span><span class="hljs-variable">$return_var</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">implode</span></span><span>(</span><span><span class="hljs-string">"\n"</span></span><span>, </span><span><span class="hljs-variable">$output</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$return_var</span></span><span>; </span><span><span class="hljs-comment">// command ကို၏ return status status ကိုကုဒ်</span></span><span>
</span></span> shell_exec :
shell_exec သည် command တစ်ခုလုံး၏စံထုတ်လုပ်မှုကိုကြိုးတစ်ချောင်းအဖြစ်ပြန်ပို့သည်။ output တစ်ခုလုံးကိုပြန်ရောက်လာပြီးအများအားဖြင့် command ရလဒ်များသို့မဟုတ် outputted ခံရဖို့လိုအပ်တဲ့အမှုပေါင်းများအတွက်သင့်လျော်သည်။ သို့သော်၎င်းသည်အမှားအယွင်းတစ်ခုမရရှိနိုင်ပါ။ command execute ပျက်ကွက်ပါကအမှားကုဒ်ကိုတိုက်ရိုက်မရနိုင်ပါ။
ဥပမာ -
<span><span><span class="hljs-variable">$output</span></span><span> = </span><span><span class="hljs-title function_ invoke__">shell_exec</span></span><span>(</span><span><span class="hljs-string">'cat non_existing_file'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$output</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Command failed."</span></span><span>;
}
</span></span> exec :
EXIT သည် ပုံမှန် output ကို array တစ်ခုအဖြစ်ပြန်လည်ရောက်ရှိစေပြီး command output ကိုထပ်မံလုပ်ဆောင်နိုင်သည်။ ထို့အပြင် Exec သည် command ၏ထွက်ပေါက်အဆင့်အတန်းကုဒ်ကိုပြန်ပို့ပေးလိမ့်မည်။ ၎င်းသည် command ကိုအောင်မြင်စွာကွပ်မျက်ခံရခြင်းရှိမရှိဆုံးဖြတ်ရန်အလွန်အသုံးဝင်သည်။ Exec အား ပိုမိုခိုင်မာသည့်ထိန်းချုပ်မှုကိုထောက်ပံ့ပေးပြီးပြည်နယ်၏အခြေအနေနှင့် command execution ၏ရလဒ်များအတွက်သင့်တော်သည်။
ဥပမာ -
<span><span><span class="hljs-variable">$output</span></span><span> = [];
</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-string">'ls non_existing_directory'</span></span><span>, </span><span><span class="hljs-variable">$output</span></span><span>, </span><span><span class="hljs-variable">$status_code</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$status_code</span></span><span> !== </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Command failed with status code: <span class="hljs-subst">$status_code</span></span></span><span>";
}
</span></span>Exec and Shell_exec နှစ်ခုစလုံးသည်ပြင်ပ command များကိုလုပ်ဆောင်နိုင်သော်လည်းအထူးသဖြင့်အသုံးပြုသူ input ကိုပြုပြင်သည့်အခါလုံခြုံရေးအန္တရာယ်များကိုဖော်ထုတ်နိုင်သည်။ ပြင်ပ command များကိုကွပ်မျက်သည့်အခါမည်သည့်လျှပ်စစ်ဓာတ်အားသွင်းခြင်းမဆိုသုံးစွဲသူထည့်သွင်းမှုသည် command in infection အားနည်းချက်များကိုဖြစ်စေနိုင်သည်။
command intement ကိုတားဆီး
ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုသောအခါအသုံးပြုသူထည့်သွင်းမှုနှင့် ပတ်သက်. အထူးဂရုပြုရန်လိုအပ်သည်။ ESSAPHELLG နှင့် ESSAPHELLCMD ကို အသုံးပြု. command ကိုအန္တရာယ်ရှိသောကုဒ်များကိုအသုံးမပြုသောကုဒ်များမအောင်မြင်စေရန်အတွက် escapshesg နှင့် escapeshellcmd ကို အသုံးပြုရန်အကောင်းဆုံးဖြစ်သည်။
ဥပမာ -
<span><span><span class="hljs-variable">$user_input</span></span><span> = </span><span><span class="hljs-title function_ invoke__">escapeshellarg</span></span><span>(</span><span><span class="hljs-variable">$user_input</span></span><span>);
</span><span><span class="hljs-variable">$output</span></span><span> = </span><span><span class="hljs-title function_ invoke__">shell_exec</span></span><span>(</span><span><span class="hljs-string">"grep <span class="hljs-subst">$user_input</span></span></span><span> file.txt");
</span></span>စွမ်းဆောင်ရည်အရ Shell_exec နှင့် Exec တို့အကြားကွာခြားချက်သည်အလွန်ကြီးမားသောအရာမှာအလွန်ကြီးမားသောခြားနားချက်မှာလိုင်းတစ်ခုအတွက် output ကိုပြန်ပို့နိုင်သည့်အရာ သည် output data အမြောက်အများကိုပိုမိုပြောင်းလဲစေနိုင်သည်။ Shell_exec တစ်ခုလုံးသည် output string တစ်ခုလုံးကိုပြန်ပို့သည်။ ၎င်းသည်ကြီးမားသောအချက်အလက်များကိုထုတ်လုပ်သည့်အခါမှတ်ဉာဏ်ကိုစားသုံးနိုင်သည်။
shell_exec :
command output ကိုယူရန်နှင့်ကြိုးအဖြစ်သို့ပြန်လာရန်လိုအပ်သည့်နေရာများအတွက်သင့်တော်သောအခြေအနေများအတွက်သင့်တော်သည်။
command ၏ရလဒ်ကိုသင်သာဂရုစိုက်သောအခါ, လိုင်းတစ်ခုစီ၏ရလဒ်သို့မဟုတ် command ၏ status code ကိုသင် shell_exec ကို ရွေးချယ်နိုင်သည်။
ဥပမာဇာတ်လမ်း - ဇာတ်ညွှန်းသို့မဟုတ် command တစ်ခု၏အပြည့်အ 0 ထုတ်လုပ်မှုကို ကောက်ကောက် မှဒေါင်းလုပ်လုပ်ခြင်းကဲ့သို့သောဇာတ်ညွှန်းသို့မဟုတ် command ကိုရယူပါ။
exec :
Command output ကိုမျဉ်းကြောင်းဖြင့်မျဉ်းကြောင်းဖြင့်လိုင်းများပြုလုပ်ရန်လိုအပ်သည့်နေရာသို့မဟုတ် command ၏ထွက်ပေါက်အဆင့်အတန်းကိုရယူရန်လိုအပ်သည့်အခြေအနေများအတွက်သင့်တော်သည်။
Command output ကိုထပ်မံလုပ်ဆောင်ရန်သို့မဟုတ် command outputs မျိုးစုံကိုစစ်ဆေးရန်သို့မဟုတ်မျိုးစုံထုတ်ယူမှုများနှင့်နှိုင်းယှဉ်ခြင်းကဲ့သို့သော EXIC သည်ပိုမိုသင့်လျော်သည်။
ဥပမာဇာတ်လမ်း - ရှုပ်ထွေးသော command များသို့မဟုတ်ပြန်လည်လုပ်ဆောင်ရန်လိုအပ်သည့်စစ်ဆင်ရေးကုဒ်များလိုအပ်သည့်စစ်ဆင်ရေးကို Excape လုပ်ပါ။
| လုပ်ဆောင်ချက် | အကျိုးဖြစ်ထွန်းမှု | ဆယ့်ရှိသော | သက်ဆိုင်တဲ့အခြေအနေများ |
|---|---|---|---|
| shell_exec | command output ကို string တစ်ခုအနေဖြင့်ရိုးရိုးရှင်းရှင်းပြန်ပို့ပါ | ထွက်ပေါက်အဆင့်အတန်းကုဒ်ကိုမပြန်ပါ။ ၎င်းသည်ကြီးမားသည့်အခါ output သည်မှတ်ဥာဏ်ပိုမိုသုံးစွဲနိုင်သည်။ | Command ရလဒ်များကိုသာဂရုစိုက်ပါ |
| အီအီဥှမှန်သောစည်း | ပံ့ပိုးမှုစင်တာ output ကိုလိုင်းများနှင့်ထွက်ပေါက် status code, ပိုမိုပြောင်းလွယ်ပြင်လွယ်ပြန်သွားပါ | ၎င်းသည်အသုံးပြုရန်အနည်းငယ်ရှုပ်ထွေးပြီးလုပ်ဆောင်ရန်ပြင်ဆင်မှုများနှင့် status codes များကိုလိုအပ်သည် | command output ကိုသို့မဟုတ်မှီခိုအဆင့်အတန်းကုဒ်တရားစီရင်ချက်ကိုခွဲခြမ်းစိတ်ဖြာရန်လိုအပ်သည် |
ယေဘုယျအားဖြင့် shell_exec နှင့် exec သည် ၎င်းတို့၏ကိုယ်ပိုင်အားသာချက်များနှင့်အားနည်းချက်များရှိသည်။ မည်သည့်ရွေးချယ်မှုကိုရွေးချယ်ထားသည့် command ကွပ်မျက်မှုရလဒ်အတွက်သင်၏လိုအပ်ချက်များအပေါ်မူတည်သည်။ အကယ်. သင်သည် command ၏အပြည့်အဝ output ကိုသာဂရုစိုက်ပါက shell_exec ကို သုံးနိုင်သည်။ အကယ်. သင်သည် output line ကိုလိုင်းဖြင့်ပြုလုပ်ရန်သို့မဟုတ် command ၏ထွက်ပေါက်အခြေအနေကုဒ်ကိုစစ်ဆေးရန်လိုအပ်ပါက Exec သည် ပိုမိုသင့်လျော်သောရွေးချယ်မှုဖြစ်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် command injection ၏အန္တရာယ်များကိုကာကွယ်ရန်နှင့်အမှန်တကယ်လိုအပ်ချက်များအရသင့်လျော်သောလုပ်ဆောင်ချက်များကိုရွေးချယ်ရန်အာရုံစိုက်ရန်အရေးကြီးသည်။