လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> shell_exec နှင့် EURE EURCE လုပ်ငန်းများအကြားခြားနားချက်ကဘာလဲ။ PHP တွင်၎င်းတို့၏သက်ဆိုင်သည့်အခြေအနေများနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များအားခွဲခြမ်းစိတ်ဖြာခြင်း

shell_exec နှင့် EURE EURCE လုပ်ငန်းများအကြားခြားနားချက်ကဘာလဲ။ PHP တွင်၎င်းတို့၏သက်ဆိုင်သည့်အခြေအနေများနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များအားခွဲခြမ်းစိတ်ဖြာခြင်း

gitbox 2025-09-16

PHP တွင် Shell_exec နှင့် EXE EURT လုပ်ငန်းများကိုပြင်ပ command များ (သို့) script များကိုလုပ်ဆောင်ရန်အသုံးပြုသည်။ အသုံးပြုမှုအခြေအနေများနှင့်ဤလုပ်ဆောင်မှုနှစ်ခု၏အားသာချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များကိုနားလည်ခြင်းသည်ထိရောက်သောနှင့်လုံခြုံသောကုဒ်များရေးသားခြင်းအတွက်အလွန်အရေးကြီးသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခုနှင့်၎င်းတို့၏သက်ဆိုင်သည့်အခြေအနေများနှင့်အားသာချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များနှင့်အားနည်းချက်များအကြားကွဲပြားခြားနားမှုများကိုဤဆောင်းပါးတွင်လေ့လာသုံးသပ်လိမ့်မည်။

1 ။ အခြေခံသဘောတရားများ

  • 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>

2 ။ output ကိုအပြောင်းအလဲနဲ့

  • 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>

3 ။ လုံခြုံရေး

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>

4 ။ စွမ်းဆောင်ရည်

စွမ်းဆောင်ရည်အရ Shell_exec နှင့် Exec တို့အကြားကွာခြားချက်သည်အလွန်ကြီးမားသောအရာမှာအလွန်ကြီးမားသောခြားနားချက်မှာလိုင်းတစ်ခုအတွက် output ကိုပြန်ပို့နိုင်သည့်အရာ သည် output data အမြောက်အများကိုပိုမိုပြောင်းလဲစေနိုင်သည်။ Shell_exec တစ်ခုလုံးသည် output string တစ်ခုလုံးကိုပြန်ပို့သည်။ ၎င်းသည်ကြီးမားသောအချက်အလက်များကိုထုတ်လုပ်သည့်အခါမှတ်ဉာဏ်ကိုစားသုံးနိုင်သည်။

5 ။ သက်ဆိုင်သောအခြေအနေများ

  • shell_exec :

    • command output ကိုယူရန်နှင့်ကြိုးအဖြစ်သို့ပြန်လာရန်လိုအပ်သည့်နေရာများအတွက်သင့်တော်သောအခြေအနေများအတွက်သင့်တော်သည်။

    • command ၏ရလဒ်ကိုသင်သာဂရုစိုက်သောအခါ, လိုင်းတစ်ခုစီ၏ရလဒ်သို့မဟုတ် command ၏ status code ကိုသင် shell_exec ကို ရွေးချယ်နိုင်သည်။

    • ဥပမာဇာတ်လမ်း - ဇာတ်ညွှန်းသို့မဟုတ် command တစ်ခု၏အပြည့်အ 0 ထုတ်လုပ်မှုကို ကောက်ကောက် မှဒေါင်းလုပ်လုပ်ခြင်းကဲ့သို့သောဇာတ်ညွှန်းသို့မဟုတ် command ကိုရယူပါ။

  • exec :

    • Command output ကိုမျဉ်းကြောင်းဖြင့်မျဉ်းကြောင်းဖြင့်လိုင်းများပြုလုပ်ရန်လိုအပ်သည့်နေရာသို့မဟုတ် command ၏ထွက်ပေါက်အဆင့်အတန်းကိုရယူရန်လိုအပ်သည့်အခြေအနေများအတွက်သင့်တော်သည်။

    • Command output ကိုထပ်မံလုပ်ဆောင်ရန်သို့မဟုတ် command outputs မျိုးစုံကိုစစ်ဆေးရန်သို့မဟုတ်မျိုးစုံထုတ်ယူမှုများနှင့်နှိုင်းယှဉ်ခြင်းကဲ့သို့သော EXIC သည်ပိုမိုသင့်လျော်သည်။

    • ဥပမာဇာတ်လမ်း - ရှုပ်ထွေးသော command များသို့မဟုတ်ပြန်လည်လုပ်ဆောင်ရန်လိုအပ်သည့်စစ်ဆင်ရေးကုဒ်များလိုအပ်သည့်စစ်ဆင်ရေးကို Excape လုပ်ပါ။

6 ။ အနှစ်ချုပ်နှင့်အကောင်းအဆိုးအားဆန်းစစ်ခြင်း

လုပ်ဆောင်ချက် အကျိုးဖြစ်ထွန်းမှု ဆယ့်ရှိသော သက်ဆိုင်တဲ့အခြေအနေများ
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 ၏အန္တရာယ်များကိုကာကွယ်ရန်နှင့်အမှန်တကယ်လိုအပ်ချက်များအရသင့်လျော်သောလုပ်ဆောင်ချက်များကိုရွေးချယ်ရန်အာရုံစိုက်ရန်အရေးကြီးသည်။