အင်တာနက်ဖွံ့ဖြိုးတိုးတက်မှုနှင့်အတူ PHP-based ဝက်ဘ်ဆိုက်များသည် application တစ်ခု၏များစွာသော application ကိုအသုံးပြုနေဆဲဖြစ်သည်။ PHP ၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လူကြိုက်များမှုကြောင့်အန္တရာယ်ကင်းသောအရေးအသားနည်းလမ်းများကိုတိုက်ခိုက်သူများကအလွယ်တကူအမြတ်ထုတ်နိုင်သည်။ ဤဆောင်းပါးသည်အသုံးချသည့်နည်းစနစ်များနှင့်ကာကွယ်ရေးအတွေးအခေါ်များကိုလက်တွေ့ကျကျရှုထောင့်မှလက်တွေ့ကျကျရှုထောင့်မှကြည့်ရှုခြင်းနှင့်ပြုပြင်ခြင်းဆိုင်ရာကုဒ်ကိုဆက်လက်ထိန်းသိမ်းထားသည်။ ဆိုက်ကိုမြှင့်တင်ခြင်းသို့မဟုတ်အတွင်းပိုင်းချိတ်ဆက်မှုများနှင့်သက်ဆိုင်သောသတင်းအချက်အလက်များကိုဆောင်းပါးမှဖယ်ရှားခဲ့သည်။
ဖော်ပြချက် - တိုက်ခိုက်သူများကတိုက်ခိုက်သူများသည်အန္တရာယ်ရှိသော 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 အမျိုးအစားများကိုပြောင်းလဲနိုင်သည်။
ကာကွယ်မှုအကြံပြုချက်များ:
လုံခြုံရေးတစ်ခုတွင်လုံခြုံရေးကိုမပြီးစီးနိုင်ပါ။ ဖွံ့ဖြိုးတိုးတက်မှုနှင့်လုပ်ငန်းလည်ပတ်မှုနှင့်ပြုပြင်ထိန်းသိမ်းမှုများအတွင်းအောက်ပါကျင့်ထုံးများကိုကျင့်သုံးရန်အကြံပြုသည်။
ဤဆောင်းပါးသည်ပုံမှန် PHP လုံခြုံရေးပြ issues နာများကိုပြသသည်။ developer များ developer များသည်လိုအပ်ချက်, ဒီဇိုင်း, အကောင်အထည်ဖော်ခြင်းနှင့်ပြုပြင်ခြင်းနှင့်ပြုပြင်ထိန်းသိမ်းမှုဆိုင်ရာကဏ် aspect တိုင်းတွင်လုံခြုံရေးအသိအမြင်များကိုပေါင်းစပ်ရန်မျှော်လင့်ရသည်။ ဥပမာအားဖြင့်အားနည်းချက်အမျိုးအစားတစ်ခုစီအတွက်အမှန်တကယ်ပတ်ဝန်းကျင်သည်ပိုမိုရှုပ်ထွေးနိုင်သည်။ ပစ်မှတ်ထားသောပြုပြင်မှုများအတွက် Code စာရင်းစစ်ခြင်း, အလိုအလျောက်စကင်ဖတ်စစ်ဆေးမှုနှင့်ထိုးဖောက်ခြင်းစစ်ဆေးခြင်း၏ရလဒ်များကိုပေါင်းစပ်ရန်အကြံပြုသည်။