PHP, fopen () နှင့် hash_update_stream () ကိုမကြာခဏဖိုင်စီးဆင်းမှုများကိုပြုလုပ်ရန်နှင့် Hash တန်ဖိုးများကိုတွက်ချက်ရန်အသုံးပြုလေ့ရှိသည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအတူတကွအသုံးပြုသောအခါကျွန်ုပ်တို့သည်စွမ်းဆောင်ရည်နှင့်လုံခြုံရေးကိုအာရုံစိုက်ရန်လိုအပ်သည်။ ဤဆောင်းပါးသည် PHP တွင်ဤလုပ်ငန်းဆောင်တာနှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုလေ့လာလိမ့်မည်။
ပထမ ဦး စွာလုပ်ဆောင်ချက်နှစ်ခု၏လုပ်ဆောင်ချက်များကိုအလျင်အမြန်နားလည်ကြပါစို့။
FOPEN () - ဤလုပ်ဆောင်ချက်သည်ဖိုင် (သို့) URL ကိုဖွင့်ရန်နှင့်စာဖတ်ခြင်း ( R ), စာ ဖြင့်ရေးသားခြင်းကဲ့သို့သောကွဲပြားခြားနားသော mode များကိုအသုံးပြုသည်။ Fopen (R ကိုရေးခြင်း ()) စသည်တို့ကိုအသုံးပြုသည်။
Hash_Update_stream () - ဒီ function ကို data stream (ဥပမာဖိုင်သို့မဟုတ် URL မှဖတ်ပါ) ကိုရှိပြီးသား hash တွက်ချက်မှုမှဖတ်ရန်ဖြစ်သည်။ ၎င်းသည်ကြီးမားသောဖိုင်များ၏ hash တွက်ချက်မှုများအတွက်သင့်တော်သည်, ၎င်းသည်ဖိုင်တစ်ခုလုံးကိုဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်တည်းမတင်ဘဲဖိုင်တွဲတစ်ခုစီကိုအပိုင်းအစတစ်ခုဖြင့်ပြုလုပ်နိုင်သည်။
<?php
$file = fopen("example.txt", "r");
$context = hash_init('sha256');
while (!feof($file)) {
$data = fread($file, 8192); // တစ်ခုချင်းစီကိုဖတ်ပါ8192ဒရယ်
hash_update_stream($context, $data);
}
fclose($file);
$hash = hash_final($context);
echo "ဖိုင်၏ hash တန်ဖိုးဖြစ်ပါတယ်: " . $hash;
?>
hash_update_stream () ဖိုင်အချက်အလက်များကိုလုပ်ဆောင်သောအခါစွမ်းဆောင်ရည်တွင်အဓိကအချက်မှာကြားခံ၏အရွယ်အစားဖြစ်သည်။ ပုံမှန်အားဖြင့်သင်သည်သေးငယ်သောလုပ်ကွက်များ (ဥပမာ - 1 byte သို့မဟုတ် 64 bytes ကဲ့သို့သော) ကိုဖတ်ပါကဖတ်ရှုခြင်းနှင့် hash update ၏ overhead သည်မြင့်မားလိမ့်မည်။ အပြန်အလှန်အားဖြင့်သင်သည်ကြီးမားသောလုပ်ကွက်များကိုဖတ်ရှုလျှင်, အထူးသဖြင့်ကြီးမားသောဖိုင်များအတွက်သင်မှတ်ဉာဏ်အလွန်အကျွံယူနိုင်သည်။
8192 bytes (8 KB) သို့မဟုတ် 16384 bytes ကဲ့သို့သောကြီးမားသောကြားခံကိုအသုံးပြုရန်အကြံပြုသည်။ (16 KB) ။ ဤကဲ့သို့သောအကောင်းမြင်မှုနှင့်အတူကျွန်ုပ်တို့သည်စာဖတ်ခြင်းနှင့်ဆေးထည့်ခြင်းများကိုဖိုင်များဖတ်ရှုခြင်းနှင့်ဆေးထည့်ခြင်းများအတွင်းကျွန်ုပ် / o လုပ်ငန်းလည်ပတ်မှုနှုန်းကိုလျှော့ချနိုင်သည်။
ဖိုင်တစ်ခုကိုတစ်ကြိမ်ဖတ်ရှုနိုင်သည့်အကြိမ်အရေအတွက်ကိုအနည်းဆုံးဖတ်ရှုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ပရိုဂရမ်၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။ ကွင်းဆက်တစ်ခုစီတွင် (ဥပမာ 8 KB သို့မဟုတ်ပိုကြီးသည့် 8 kb သို့မဟုတ်ပိုကြီးသည့်) များ (ဥပမာ 8 KB သို့မဟုတ်ပိုကြီးသည်) ကိုဖတ်ခြင်းသည်တစ်ချိန်တည်းတွင် KB (သို့) သေးငယ်သည့်လုပ်ကွက်များကိုသာဖတ်ရှုခြင်းထက်ကောင်းမွန်သောနည်းဗျူဟာတစ်ခုဖြစ်သည်။
အထက်ဖော်ပြပါကုဒ်များတွင် Force ($ file, 8192) သည်ဒေတာ 8 ကီလိုဂရမ် (8192) ကိုတစ်ကြိမ်ဖတ်ရှုသည်။
FOPEN () ဖိုင် (သို့) URL ကိုဖွင့်ရန်ကျွန်ုပ်တို့ဝင်ရောက်ကြည့်ရှုနေသောဖိုင်သည်ယုံကြည်စိတ်ချရကြောင်းသေချာစေရန်သေချာစေရမည်။ ဖိုင်လမ်းကြောင်းကိုပုံမှန်အားဖြင့်ထုတ်လွှတ်ပါက traversal တိုက်ခိုက်မှုလမ်းကြောင်းတစ်ခုဖြစ်နိုင်ချေရှိနိုင်သည်။
ရိုးရှင်းသောလုံခြုံရေးအစီအမံသည်ဖိုင်လမ်းကြောင်းကိုအတည်ပြုရန်နှင့်လမ်းကြောင်းသည်တရားဝင်ဖြစ်ကြောင်းသေချာစေရန်ဖြစ်သည်။ ဒီမှာနမူနာကုဒ်တစ်ခုပါ။
<?php
$filePath = $_GET['file']; // ဖိုင်လမ်းကြောင်းအသုံးပြုသူ input ကိုမှလာသည်ဟုယူဆ
// ဖိုင်လမ်းကြောင်းသည်ခွင့်ပြုထားသောလမ်းညွှန်နယ်ပယ်အတွင်း၌သေချာအောင်လုပ်ပါ
if (strpos(realpath($filePath), '/allowed/directory') !== 0) {
die("တရားမဝင်ဖိုင်လမ်းကြောင်း!");
}
$file = fopen($filePath, "r");
// ဖိုင်ကိုဆက်လက်လုပ်ဆောင်ပါ
?>
ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည်ဖိုင်လမ်းကြောင်းသည်မျှော်မှန်းထားသည့်လမ်းညွှန်တွင်ရှိနေပြီးအခြားလမ်းညွှန်များတွင်အထိခိုက်မခံသောဖိုင်များမရှိပါ။
အကယ်. သင်သည် URLs များ ( fopen () မှတဆင့်ဝေးလံခေါင်သီသောဖိုင်များကိုဖွင့်လှစ်ခြင်းကဲ့သို့သောအဝေးမှဖိုင်များဖွင့်လှစ်ခြင်းကဲ့သို့သော) အထူးသဖြင့်ဝေးလံခေါင်သီသောဖိုင်ထည့်သွင်းခြင်း (RFI) တိုက်ခိုက်မှုများနှင့်အတူသတိထားပါ။ ထိုကဲ့သို့သောတိုက်ခိုက်မှုများကိုကာကွယ်ရန် ခွင့်ပြုရန်ခွင့်ပြုရန် ခွင့်ပြုရန်အကြံပြုသည်။ ယုံကြည်စိတ်ချရသောဒိုမိန်းအမည်များကိုသာခွင့်ပြုရန်ခွင့်ပြုထားသည်။
ini_set('allow_url_fopen', 'Off'); // အနီးကပ်အဝေးထိန်းဖိုင်စစ်ဆင်ရေး
ထို့အပြင် URL များပါ 0 င်သည့်နေရာများအားလုံးအတွက် Domain Name ကိုအစားထိုးရန် M66.net နှင့်အစားထိုးရန်သတိရပါ။ ဥပမာအားဖြင့်မူရင်း URL သည် http://exampe.com/file.txt ဖြစ်နိုင်သည်။ ၎င်းကို http://m66.net/file.txt သို့ပြောင်းသင့်သည်။
စွမ်းဆောင်ရည်နှင့်လုံခြုံရေးနှစ်ခုလုံးနှင့် fopen () နှင့် hash_update_stream ကို အသုံးပြုနည်းကိုပြသသည့်အကောင်းဆုံးကုဒ်ပါသောဥပမာတစ်ခုဖြစ်သည်။
<?php
$filePath = '/path/to/your/file.txt'; // သင်၏ဖိုင်လမ်းကြောင်း
$context = hash_init('sha256');
// ဖိုင်လမ်းကြောင်းသည်တရားဝင်မရှိမရှိစစ်ဆေးပါ
if (strpos(realpath($filePath), '/allowed/directory') !== 0) {
die("တရားမဝင်ဖိုင်လမ်းကြောင်း!");
}
$file = fopen($filePath, 'r');
if (!$file) {
die("ဖိုင်ကိုဖွင့ ်. မရပါ");
}
while (!feof($file)) {
$data = fread($file, 8192); // တစ်ခုချင်းစီကိုဖတ်ပါ8192ဒရယ်
hash_update_stream($context, $data);
}
fclose($file);
$hash = hash_final($context);
echo "ဖိုင်၏ hash တန်ဖိုးဖြစ်ပါတယ်: " . $hash;
?>
ဤဥပမာတွင်ပရိုဂရမ်သည်ဖိုင်ကိုလုံခြုံစွာပြုလုပ်ပြီးစွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေရန် 8192 bytes ပမာဏကိုအသုံးပြုသည်။
hash_update_stream ၏စွမ်းဆောင်ရည်ကိုအကောင်းဆုံးဖြစ်စေရန် 8192 bytes (သို့) 16384 Bytes ကဲ့သို့သောကြီးမားသောကြားခံကိုသုံးပါ။
ဖိုင်လမ်းကြောင်းများ၏တရားဝင်မှုကိုသေချာစေရန်နှင့်လမ်းကြောင်းဖြတ်သန်းမှုကိုတားဆီးပါ။
URL စစ်ဆင်ရေးအတွက် ခွင့်ပြုရန်ခွင့်ပြုပါ ။ URL တွင် domain name ကိုယုံကြည်စိတ်ချထိုက်ကြောင်းသေချာစေပြီး၎င်းကို M66.net နှင့်အစားထိုးရန်အကောင်းဆုံးဖြစ်သည်။
အထူးသဖြင့်ဖိုင်များနှင့် URLs များကိုအထူးသဖြင့်ဝေးလံသောဖိုင်ပါ 0 င်မှု (RFI) နှင့်လမ်းညွှန်ဖြတ်သန်းမှုများကိုဆန့်ကျင်။ ခြယ်လှယ်သည့်အခါအထူးဂရုပြုပါ။
ဤအကောင်းမြင်မှုများမှတစ်ဆင့် PHP တွင် Hash တွက်ချက်မှု၏စွမ်းဆောင်ရည်ကိုတိုးတက်အောင်မလုပ်နိုင်သော်လည်းသင်၏ကုဒ်၏လုံခြုံရေးကိုလည်းတိုးတက်စေသည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
fopen