လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ဘုံ PHP လုံခြုံရေးအားနည်းချက်များနှင့်ကာကွယ်မှု - ဆေးထိုးရန်လက်တွေ့လမ်းညွှန်, ဖိုင်ထည့်သွင်းခြင်းနှင့်တင်ခြင်း

ဘုံ PHP လုံခြုံရေးအားနည်းချက်များနှင့်ကာကွယ်မှု - ဆေးထိုးရန်လက်တွေ့လမ်းညွှန်, ဖိုင်ထည့်သွင်းခြင်းနှင့်တင်ခြင်း

M66 2025-10-28

နိဒါန်း

အင်တာနက်ဖွံ့ဖြိုးတိုးတက်မှုနှင့်အတူ PHP-based ဝက်ဘ်ဆိုက်များသည် application တစ်ခု၏များစွာသော application ကိုအသုံးပြုနေဆဲဖြစ်သည်။ PHP ၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လူကြိုက်များမှုကြောင့်အန္တရာယ်ကင်းသောအရေးအသားနည်းလမ်းများကိုတိုက်ခိုက်သူများကအလွယ်တကူအမြတ်ထုတ်နိုင်သည်။ ဤဆောင်းပါးသည်အသုံးချသည့်နည်းစနစ်များနှင့်ကာကွယ်ရေးအတွေးအခေါ်များကိုလက်တွေ့ကျကျရှုထောင့်မှလက်တွေ့ကျကျရှုထောင့်မှကြည့်ရှုခြင်းနှင့်ပြုပြင်ခြင်းဆိုင်ရာကုဒ်ကိုဆက်လက်ထိန်းသိမ်းထားသည်။ ဆိုက်ကိုမြှင့်တင်ခြင်းသို့မဟုတ်အတွင်းပိုင်းချိတ်ဆက်မှုများနှင့်သက်ဆိုင်သောသတင်းအချက်အလက်များကိုဆောင်းပါးမှဖယ်ရှားခဲ့သည်။

SQL injection ဥပမာများနှင့်ကာကွယ်မှု

ဖော်ပြချက် - တိုက်ခိုက်သူများကတိုက်ခိုက်သူများသည်အန္တရာယ်ရှိသော SQL အပိုင်းအစများကို input ထဲသို့ input ကိုထိုးသွင်း။ အချက်အလက်များကို data dater or structure / Tamper ကိုရှောင်ကွင်းရန်မူရင်းမေးမြန်းချက်ဆိုင်ရာယုတ္တိဗေဒကိုပြောင်းလဲခြင်း။

 <?php
$id = $_GET['id'];

// splicing SQL စုံစမ်းမှုကြေညာချက်
$sql = "SELECT * FROM users WHERE id = " . $id;

// quented
$result = mysqli_query($conn, $sql);

// လုပ်ငန်းစဉ်မေးမြန်းချက်ရလဒ်များ
// ...
?>

ပြ Proble နာ: အသုံးပြုသူ input ကိုတိုက်ရိုက်စူးစိုက်ကြည့်ခြင်းကကြေညာချက်ကိုအနှောင့်အယှက်ပေးလိမ့်မည်။ ဥပမာအားဖြင့် ID = 1 သို့မဟုတ် 1 = 1 = 1 = 1 = 1 သည်အထိခိုက်မခံသောဒေတာယိုစိမ့်မှုသို့မဟုတ် authentication ရှောင်ကွင်းများဆီသို့ ဦး တည်သွားစေနိုင်သည်။

သုံးစွဲသူထည့်သွင်းမှုများကိုတိုက်ရိုက်ခွဲခြားရန်ရှောင်ရှားရန် Parameterized မေးမြန်းချက်များ (ကြိုတင်သတ်မှတ်ထားသည့်ထုတ်ပြန်ချက်များ) သို့မဟုတ် Orm ကိုသုံးပါ။ input အပေါ်အမျိုးအစားစိစစ်အတည်ပြုမှုပြုလုပ်ပါ (ဥပမာ ID သည်ကိန်းတစ်ခုဖြစ်စေခြင်း), အတွင်းအသေးစိတ်အချက်အလက်များယိုစိမ့်မှုကိုရှောင်ရှားရန်သင့်လျော်စွာအမှားအယွင်းများကိုသင့်လျော်စွာကိုင်တွယ်ပါ။

ဖိုင်တွင်အားနည်းချက်ဥပမာများနှင့်ကာကွယ်မှုပါရှိသည်

ဖော်ပြချက် - ဖိုင်များပါ 0 င်သည့်လမ်းကြောင်းကိုတင်းကြပ်စွာထိန်းချုပ်ခြင်းမရှိပါကတိုက်ခိုက်သူသည်မည်သည့်ဖိုင်ကိုမဆို,

 <?php
$page = $_GET['page'];

// splicing文件路径并包含文件
include("pages/" . $page . ".php");

?>

ပြနာ - စာမျက်နှာ parameter သည်စာမျက်နှာပေါ်တွင်ကန့်သတ်ချက်များမရှိပါ။ တိုက်ခိုက်သူသည် စာမျက်နှာ = config ကဲ့သို့သောလမ်းကြောင်းမှတဆင့်အထက်အဆင့်လမ်းညွှန်ချက်ကိုအထိခိုက်မခံသော directory configuration ကိုရယူနိုင်သည်။

အကာအကွယ်အကြံပြုချက်များ - သုံးစွဲသူများမှလမ်းကြောင်းများမပါ 0 င်ပါနှင့်။ ထည့်သွင်းနိုင်သောဖိုင်အမည်များကိုကန့်သတ်ရန် Whitelist ယန္တရားကိုသုံးပါ။ အခြေစိုက်စခန်းလမ်းညွှန်ကို သုံး. မပါဝင်မီပကတိလမ်းကြောင်းသို့လမ်းကြောင်းကိုဖြေရှင်းပြီးခွင့်ပြုထားသောအကွာအဝေးအတွင်းရှိ, မရှိအတည်ပြုခြင်း, PPP configuration options ကိုဖွင့်ပါ။

ဖိုင်တင်ခြင်းအားနည်းခြင်းဥပမာများနှင့်ကာကွယ်မှု

ဖော်ပြချက် - ဖိုင်တင်ခြင်းလုပ်ဆောင်ချက်သည်ဖိုင် extension သို့မဟုတ်အမည်ကိုသာစစ်ဆေးပါကတိုက်ခိုက်သူသည်လျှို့ဝှက်ထားသည့် executable script ကို တင်. ဆာဗာတွင်တင်နိုင်သည်။

 <?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);

// ဖိုင်အမျိုးအစားကိုစစ်ဆေးပါ
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if ($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif") {
    exit("သာပုံရိပ်ဖိုင်များကိုတင်ရန်ခွင့်ပြုပါ!");
}

// ဖိုင်များကိုတင်ပါ
if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
    echo "ဖိုင်ကိုအောင်မြင်စွာတင်ပါ!";
} else {
    echo "ဖိုင်တင်ခြင်းမအောင်မြင်ပါ!";
}

?>

ပြနာ - ဖိုင် extension တစ်ခုတည်းကိုအခြေခံပြီးတရားစီရင်ခြင်းသည်စိတ်မချရပါ။ တိုက်ခိုက်သူများသည်အန္တရာယ်ရှိသော script များကိုတင်ရန်အတွက် extension သို့မဟုတ် mime အမျိုးအစားများကိုပြောင်းလဲနိုင်သည်။

ကာကွယ်မှုအကြံပြုချက်များ:

  • ဖိုင်ကိုအကြောင်းအရာရှာဖွေတွေ့ရှိပါ (ပုံရိပ်ထုတ်ယူခြင်းစာကြည့်တိုက်ကိုစစ်ဆေးရန်ပုံရိပ်ကိုစစ်ဆေးရန်စာကြည့်တိုက်ကိုစစ်ဆေးရန်စာကြည့်တိုက်ကို အသုံးပြု. ဓာတ်ပုံပြုပြင်ခြင်းစာကြည့်တိုက်ကိုစစ်ဆေးရန်။
  • တင်ထားသောဖိုင်အတွက်ကျပန်းဖိုင်အမည်ကိုထုတ်လုပ်ပြီး 0 က်ဘ်မှတိုက်ရိုက်လက်လှမ်းမမီနိုင်သည့် directory တွင်သိုလှောင်ထားပါ။
  • ဖိုင်အရွယ်အစားနှင့်အမြန်နှုန်းကိုကန့်သတ်ပြီးအသုံးပြုသူခွင့်ပြုချက်ကိုအတည်ပြုပါ။
  • လူသိရှင်ကြားလက်လှမ်းမီရမည့်လမ်းညွှန်များတွင်ဆာဗာဖွဲ့စည်းမှုကို PHP (E.G. VIA SERVER Configuration သို့မဟုတ်နေရာချထားခြင်းကဲ့သို့သော easyable အမျိုးအစားများကိုခွဲထုတ်ခြင်းကတားမြစ်ထားကြောင်းသေချာပါစေ။

လုံခြုံသောဖွံ့ဖြိုးတိုးတက်မှုနှင့်လုပ်ငန်းများအတွက်အထွေထွေအကြံပြုချက်များ

လုံခြုံရေးတစ်ခုတွင်လုံခြုံရေးကိုမပြီးစီးနိုင်ပါ။ ဖွံ့ဖြိုးတိုးတက်မှုနှင့်လုပ်ငန်းလည်ပတ်မှုနှင့်ပြုပြင်ထိန်းသိမ်းမှုများအတွင်းအောက်ပါကျင့်ထုံးများကိုကျင့်သုံးရန်အကြံပြုသည်။

  • input ကိုအမြဲတမ်းမယုံကြည်နိုင်ပါ။ ပြင်ပမှ input အားလုံးကိုစစ်ဆေးပြီးစစ်ထုတ်ခြင်းနှင့်အဖြူရောင်အနိမ့်ဆုံးအရသိရသည်။
  • အနည်းဆုံးအခွင့်ထူးတစ်ခု၏နိယာမ - ဒေတာဘေ့စ်အကောင့်များအတွက်ခွင့်ပြုချက်အကန့်အသတ်ဖြင့်အကောင့်များကိုအသုံးပြုရန်ကြိုးစားပါ။ ဖိုင်စနစ်ခွင့်ပြုချက်များကိုကွပ်မျက်ရန်လိုအပ်သောအနိမ့်ဆုံးခွင့်ပြုချက်များကိုကန့်သတ်ထားသင့်သည်။
  • ခေတ်မီစာကြည့်တိုက်များနှင့်မူဘောင်များကိုသုံးပါ။ ဒေတာဘေ့စ်များ, authentication နှင့် file operations များကိုကိုင်တွယ်ရန်ရင့်ကျက်သောမူဘောင်များသို့မဟုတ်စာကြည့်တိုက်များကိုအသုံးပြုရန်ကြိုးစားပါ။
  • Code Audit နှင့် Automated Scanning: ပုံမှန်ကုဒ်စာရင်းစစ်ဆေးမှုများပြုလုပ်ရန်, static analysis နှင့် dynamic scanning tools များကိုမိတ်ဆက်ပေးခြင်းနှင့်တက်ကြွသောစကင်ဖတ်စစ်ဆေးမှုကိရိယာများကိုမိတ်ဆက်ပေးခြင်းနှင့်ချက်ချင်းပြန်လည်ပြုပြင်ခြင်းပြ problems နာများကိုချက်ချင်းပြန်လည်ပြုပြင်ခြင်း။
  • မှတ်တမ်းများနှင့်သတိပေးချက်များ - ပုံမှန်မဟုတ်သောအပြုအမူများဖြစ်ပေါ်လာသည့်အခါချက်ချင်းရှာဖွေတွေ့ရှိနိုင်ပြီးတုံ့ပြန်နိုင်သည်။ မှတ်တမ်းများသည်အထိခိုက်မခံသောအထောက်အထားများမပါဝင်သင့်ပါ။

ကောက်ချက်

ဤဆောင်းပါးသည်ပုံမှန် PHP လုံခြုံရေးပြ issues နာများကိုပြသသည်။ developer များ developer များသည်လိုအပ်ချက်, ဒီဇိုင်း, အကောင်အထည်ဖော်ခြင်းနှင့်ပြုပြင်ခြင်းနှင့်ပြုပြင်ထိန်းသိမ်းမှုဆိုင်ရာကဏ် aspect တိုင်းတွင်လုံခြုံရေးအသိအမြင်များကိုပေါင်းစပ်ရန်မျှော်လင့်ရသည်။ ဥပမာအားဖြင့်အားနည်းချက်အမျိုးအစားတစ်ခုစီအတွက်အမှန်တကယ်ပတ်ဝန်းကျင်သည်ပိုမိုရှုပ်ထွေးနိုင်သည်။ ပစ်မှတ်ထားသောပြုပြင်မှုများအတွက် Code စာရင်းစစ်ခြင်း, အလိုအလျောက်စကင်ဖတ်စစ်ဆေးမှုနှင့်ထိုးဖောက်ခြင်းစစ်ဆေးခြင်း၏ရလဒ်များကိုပေါင်းစပ်ရန်အကြံပြုသည်။