PHP တွင် MD5_File () သည်သတ်မှတ်ထားသောဖိုင်အမျိုးအစား၏ MD5 hash တန်ဖိုးကိုတွက်ချက်ရန်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
md5_file(string $filename, bool $binary = false): string|false
ဤလုပ်ဆောင်ချက်သည်ဖိုင်စစ်ဆေးခြင်း, သိုလှောင်ရေးယန္တရား, သမာဓိစစ်ဆေးမှုများနှင့်အခြားအခြေအနေများဖိုင်များကိုကိုင်တွယ်ရာတွင်အလွန်အသုံးများသည်။ သို့သော်အမှန်တကယ်အသုံးပြုသောအခါ developer များသည်ရှုပ်ထွေးသောပြ problem နာတစ်ခုနှင့်ကြုံတွေ့ရနိုင်သည် - ဖိုင်တည်ရှိပြီးလမ်းကြောင်းသည်မှန်ကန်သော်လည်း MD5_File () သည် မှားသည် ။ ၎င်းသည်များသောအားဖြင့် ဖိုင်ခွင့်ပြုချက်ပြ issues နာများ ကြောင့်ဖြစ်သည်။ ဤဆောင်းပါးသည်၎င်း၏အကြောင်းရင်းများ, ဘုံအခြေအနေများနှင့်ဖြေရှင်းနည်းများကိုအသေးစိတ်ခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။
MD5_File () MD5 စစ်ဆင်ရေးပြုလုပ်ရန်အတွက်ဖိုင်တစ်ခုလုံးကိုဖတ်ရန်အပြည့်အစုံကိုဖတ်ရန်ကြိုးပမ်းသည်။ ထို့ကြောင့် PHP script ရှိခွင့်ပြုချက်များသည် ပစ်မှတ်ဖိုင်ကိုဖတ်ရန် မလုံလောက်ပါက function သည် မှားယွင်းသော အရာဖြစ်သည်။
MD5_File () အတွက်ဖိုင်တွင် "ဖတ်ရှုနိုင်သောခွင့်ပြုချက်" ရှိရမည်။ ၎င်းတွင်အောက်ပါရှုထောင့်များပါ 0 င်သည်။
ဖိုင်ကိုကိုယ်တိုင်ကိုယ်ကျ Execution အသုံးပြုသူ (ထိုကဲ့သို့သော www-data ) ကိုဖတ်ရှုနိုင်ပါသည်။
အဆင့်မြင့်လမ်းညွှန်များအားလုံးသည် "Execution ခွင့်ပြုချက်များ" ရှိရမည် (ဆိုလိုသည်မှာ၎င်းတို့ကို "0 င်ရောက်နိုင်သည်) ထို့ကြောင့် PHP သည်လမ်းကြောင်းကို 0 င်ရောက်နိုင်သည်။
Selinux ကဲ့သို့သော SELINUX, SELINUX, ab ရာစရီသည်လက်လှမ်းမီမှုအခွင့်အရေးများကိုအကျိုးသက်ရောက်နိုင်သည်။
ဖိုင်ခွင့်ပြုချက်သည် 600 (ပိုင်ရှင်ဖတ်နိုင်လောက်အောင်နှင့်အဆင်သင့်) သည် PHP Execute အသုံးပြုသူသည်ဖိုင်ပိုင်ရှင်မဟုတ်လျှင်ဖိုင်ကိုဖတ်လိမ့်မည်မဟုတ်ပါ။
-rw------- 1 root root 1024 May 28 10:00 secret.txt
PHP သည် WWW-data အသုံးပြုသူအဖြစ်ဖွင့်လျှင်၎င်းသည်အထက်ပါဖိုင်ကိုဖတ်နိုင်ပြီး MD5_File () သည် ပျက်ကွက်လိမ့်မည်မဟုတ်ချေ။
ဖိုင်ကိုယ်တိုင်ကခွင့်ပြုချက်ကိုဖတ်ရှုလျှင်ပင် directory ခွင့်ပြုချက်သည် PHP ကို 0 င်ခွင့်မပြုပါကဖိုင်ကို 0 င် ရောက်. မရပါ။
drwx------ 2 user user 4096 May 28 10:00 /var/private/
ဤကိစ္စတွင်ဖိုင်ကို 644 အထိသတ်မှတ်ထားသည့်တိုင် PHP သည် /var/private/secret.txt ကို 0 င် ရောက်. မရပါ။
အချို့သော Linux System အချို့သည် Selinux သို့မဟုတ် ApparMor တို့တွင်ပါ 0 င်သည်။
Selinux ၏ကန့်သတ်ချက်များကိုစစ်ဆေးရန်အောက်ပါ command ကိုသုံးနိုင်သည်။
ls -Z /path/to/file
Target File သည် PHP အသုံးပြုသူအားခွင့်ပြုချက်ကိုဖတ်ရန်သေချာပါစေ။ အလွယ်ကူဆုံးနည်းလမ်းမှာ File Permissions များကို 644 အထိသတ်မှတ်ရန်မှာ PHP သုံးစွဲသူများသည်လမ်းညွှန်သို့ခွင့်ပြုထားသည်။
chmod 644 /path/to/file.txt
chown www-data:www-data /path/to/file.txt
အောက်ပါ PHP code မှတဆင့်လက်ရှိ executor အသုံးပြုသူကိုခေတ္တ debug လုပ်နိုင်သည်။
echo get_current_user(); // သို့မဟုတ်အသုံးပြုပါ posix_geteuid()
အသုံးပြုသူသည်ပစ်မှတ်ဖိုင်များနှင့်လမ်းညွှန်များကိုဝင်ရောက်ရန်ခွင့်ပြုချက်ရှိပါစေ။
MD5_File () ကိုမခေါ်မီဖိုင်ကိုတိုက်ရိုက်အမှားများကိုရှောင်ရှားရန်ဖတ်နိုင်သည်ကိုစစ်ဆေးပါ။
$file = '/var/data/file.txt';
if (is_readable($file)) {
$hash = md5_file($file);
echo "Hash: $hash";
} else {
echo "ဖိုင်မဖတ်နိုင်သောဖိုင်မရှိပါ,ကျေးဇူးပြု. ခွင့်ပြုချက်စစ်ဆေးပါ";
}
အကယ်. သင်သည် Selinux Enabled System တွင်ရှိပါက chcCCCCO command မှတဆင့်အခြေအနေကိုပြုပြင်ရန်လိုအပ်နိုင်သည်။
chcon -t httpd_sys_content_t /path/to/file.txt
သို့မဟုတ် Selinux စမ်းသပ်ခြင်းကိုခေတ္တပိတ်ထားခြင်း (ထုတ်လုပ်မှုပတ် 0 န်းကျင်အတွက်အကြံမပေးပါ):
setenforce 0
အကယ်. သင်သည် CDN တစ်ခုသို့မဟုတ် https://m66.net/files/check.txt ကဲ့သို့သောဝေးလံသောလိပ်စာကိုအသုံးပြုနေပါက MD5_File () သည် မအောင်မြင်ပါ။ ဘာဖြစ်လို့လဲဆိုတော့၎င်းသည်ဒေသဆိုင်ရာဖိုင်လမ်းကြောင်းများကိုသာလုပ်ဆောင်နိုင်ပြီး URL များကိုမလုပ်နိုင်ပါ။ ဝေးလံခေါင်သီသောဖိုင်များကိုပထမ ဦး ဆုံးဒေါင်းလုပ်လုပ်ပြီးအောက်ပါနည်းလမ်းများကို အသုံးပြု. လုပ်ဆောင်နိုင်သည်။
error_reporting = E_ALL
display_errors = On