Web Development တွင်လုံခြုံရေးသည် developer များအတွက်အမြဲတမ်းအဓိကပြ issue နာဖြစ်သည်။ တိုက်ခိုက်မှုနည်းလမ်းများအားစဉ်ဆက်မပြတ်ဆုံခြင်းနှင့်အတူ XSS (site Cross-site scripting attack) နှင့် CSRF (Cross-site ကိုတောင်းဆိုခြင်း) သည်အများဆုံးအသုံးများသောတိုက်ခိုက်မှုနှစ်ခုဖြစ်လာသည်။ ထို့ကြောင့်ကျိုးကြောင်းဆီလျော်သောလုံခြုံရေးပြင်ဆင်မှုသည်ထိုကဲ့သို့သောတိုက်ခိုက်မှုများကိုကာကွယ်ရန်သော့ချက်ဖြစ်သည်။ ကျယ်ကျယ်ပြန့်ပြန့်အသုံးပြုသောပရိုဂရမ်ဘာသာစကားတစ်ခုအနေဖြင့် PHP သည်လုံခြုံရေးတည်ဆောက်ရန်ကြွယ်ဝသောနည်းလမ်းတစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည် XSS နှင့် CSRF တိုက်ခိုက်မှုများကို Init function ကိုလုံခြုံရေးပြင်ဆင်မှုမှတစ်ဆင့်မည်သို့ထိရောက်စွာတားဆီးနိုင်ကြောင်းကိုလေ့လာပါမည်။
XSS သည်အသုံးပြုသူများကိုဤအန္တရာယ်ရှိသောကုဒ်များကိုခွဲခြားရန်အသုံးပြုသူများကိုအသုံးပြုသူများကိုခွဲခြားရန်ဝက်ဘ်စာမျက်နှာတစ်ခုထဲသို့ 0 က်ဘ်စာမျက်နှာတစ်ခုထဲသို့ထည့်သွင်းထားသော JavaScript ကုဒ်ကိုဝက်ဘ်စာမျက်နှာတစ်ခုထဲသို့ထည့်သွင်းရန် XSS ကိုရည်ညွှန်းသည်။ XSS Attacks သည်ခွင့်ပြုချက်မရှိသောသုံးစွဲသူများဘရောက်ဇာများရှိအန္တရာယ်ရှိသော script များကိုအန္တရာယ်ရှိသော script များကိုလုပ်ဆောင်နိုင်ပြီးသတင်းအချက်အလက်ယိုစိမ့်မှုနှင့်အလွဲသုံးစားမှုဖြစ်စေနိုင်သည်။
CSRF တိုက်ခိုက်မှုများသည် 0 က်ဘ်ဆိုက်များကို 0 င်ရောက်ရန် 0 င်ရောက်သော 0 က်ဘ်ဆိုက်များကိုရယူရန် logged in 0 င်သောအသုံးပြုသူများကိုဖြစ်ပေါ်စေသည့်အခါအသုံးပြုသူများသည် 0 က်ဘ်ဆိုက်များကိုရယူရန်အဆိုအရခွင့်ပြုချက်မရှိဘဲတောင်းဆိုမှုများကိုစတင်ခဲ့သည်။ ဤနည်းအားဖြင့်တိုက်ခိုက်သူသည်သားကောင်၏ဝိသေသလက်ခဏာကို သုံး. အမျိုးမျိုးသောစစ်ဆင်ရေးများ (ဥပမာစကားဝှက်များ, ငွေလွှဲပြောင်းခြင်းစသည်တို့စသည်တို့) လုပ်ဆောင်ရန်ဖြစ်သည်။
PHP တွင် XSS နှင့် CSRF တိုက်ခိုက်မှုများကို Global Security Settings in init function တွင်ထိရောက်စွာတားဆီးနိုင်သည်။ Init function ကိုများသောအားဖြင့် application ကိုစတင်ခြင်းအတွင်းကွပ်မျက်ခံရလေ့ရှိပြီး application configuration ကိုတည်ဆောက်ရန်နှင့်ကမ္ဘာလုံးဆိုင်ရာလုံခြုံရေးအစီအမံများကိုကိုင်တွယ်ရန်အကောင်းဆုံးနေရာတစ်ခုဖြစ်သည်။
output encoding:
အသုံးပြုသူထံမှမည်သည့်အချက်အလက်ထည့်သွင်းမှုမဆိုစာမျက်နှာသို့ output ကို html တွင် encoded သင့်သည်။ ၎င်းသည်အသုံးပြုသူမှမကောင်းသော JavaScript code ကို browser မှကွပ်မျက်ခြင်းမှကာကွယ်ပေးသည်။
function init() {
// default output encoding ကိုသတ်မှတ်ပါ,တားဆီး XSS တိုက်ခိုက်ခြင်း
ini_set('html_errors', 0);
}
// အသုံးပြုသူဒေတာ outputting အခါလုပ်ဆောင်ပါ HTML entity encoding
function safeOutput($data) {
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
// နမူနာ:အသုံးပြုသူမှ output ကိုထည့်သွင်းမှု
echo safeOutput($_GET['user_input']);
အထက်ပါကုဒ်များတွင် HTMLSPECALCHARCHARS function သည် HTML အဖွဲ့အစည်းများမှ HTML အဖွဲ့အစည်းများသို့ (ဥပမာ < , > နှင့် စသဖြင့်) သည်အထူးအက္ခရာများမှလွတ်မြောက်ရန်,
Inline Javascript ကိုပိတ်ပါ။
အချို့သော browser များက Inline JavaScript Code ကိုကွပ်မျက်ခံရနိုင်သည်။ ထို့ကြောင့်ကာကွယ်မှုပိုမိုခိုင်မာစေရန်အတွက် Inline script များကိုကွပ်မျက်ခြင်းကို HTTP ခေါင်းစီးများမှတဆင့်ကာကွယ်နိုင်သည်။
function init() {
// တည်ဆောက်သည် Content Security Policy(CSP)header သတင်းအချက်အလက်,scripts ၏အရင်းအမြစ်ကိုကန့်သတ်
header("Content-Security-Policy: script-src 'self' https://gitbox.net;");
}
အထက်ပါကုဒ်တွင် အကြောင်းအရာကိုလုံခြုံရေးမူဝါဒ header information ကိုသတ်မှတ်ခြင်းဖြင့် script ၏အရင်းအမြစ်ကိုကန့်သတ်ထားပြီးပြင်ပအန္တရာယ်ရှိသော scripts များတင်ခြင်းကိုရှောင်ရှားရန်လက်ရှိဒိုမိန်းအမည်နှင့် GitABox.net မှ Javascript script များကိုသာခွင့်ပြုသည်။
CSRF အမှတ်အသားကိုဖန်တီးပြီးစစ်ဆေးပါ။
CSRF တိုက်ခိုက်မှု၏သော့ချက်မှာတောင်းဆိုမှုများကိုဖော်ထုတ်ရန်ဖြစ်သည်။ CSRF တိုကင်ကိုအသုံးပြုခြင်းအားဖြင့်တိုက်ခိုက်သူများသည်ခွင့်ပြုသူများအားတောင်းဆိုမှုများကိုတောင်းဆိုခြင်းမှထိရောက်စွာတားဆီးနိုင်သည်။ အသုံးပြုသူတစ် ဦး သည်စာမျက်နှာတစ်ခုသို့လာတိုင်းဆာဗာသည်ထူးခြားသော CSRF တိုကင်နှင့်ပုံစံထဲသို့ထည့်သွင်းသည်။ ပုံစံကိုတင်ပြသောအခါဆာဗာသည် Token သည် Token နှင့်လိုက်ဖက်သည်ကိုအသုံးပြုသူ session ထဲမှချိတ်ဆက်မှုနှင့်ကိုက်ညီမှုရှိမရှိစစ်ဆေးသည်။
function generateCSRFToken() {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
function verifyCSRFToken($token) {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (empty($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
die('CSRF token validation failed');
}
}
ပုံစံတွင် CSRF အမှတ်အသားကိုထုတ်လုပ်ပြီး၎င်းကိုလျှို့ဝှက်နယ်ပယ်တစ်ခုအဖြစ်တင်ပြပါ။
// ဖြစ်ပါှးစေ Token
$csrfToken = generateCSRFToken();
?>
<form method="POST" action="https://gitbox.net/submit_form.php">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
<!-- အခြားပုံစံလယ်ကွင်း -->
<input type="submit" value="Submit">
</form>
ပုံစံကိုတင်သွင်းသောအခါတောင်းဆိုမှုတွင် CSRF_TORED သည်တောင်းဆိုမှုတွင် csrf_token နှင့်ကိုက်ညီမှုရှိမရှိကိုစစ်ဆေးသည်။
Defer header ကိုစစ်ဆေးပါ။
CSRF တိုက်ခိုက်မှုများသည်များသောအားဖြင့် 0 င်ရောက်သည့်အချိန်တွင် 0 က်ဘ ် ဆိုက်တောင်းဆိုမှုများကိုပြုလုပ်ရန်အသုံးပြုသူများကိုအားလွဲမှားစွာမှီခိုသည်
function checkReferer() {
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (empty($referer) || strpos($referer, 'gitbox.net') === false) {
die('Invalid referer');
}
}
သင့်လျော်သောလုံခြုံရေး configuration ကို init function တွင် XSS နှင့် CSRF တိုက်ခိုက်မှုများကိုထိရောက်စွာကာကွယ်နိုင်သည်။ CSRF တိုကင်များထုတ်လုပ်ခြင်းနှင့် CSRF တိုကင်များကိုထုတ်လုပ်ခြင်းနှင့်စစ်ဆေးသူထိပ်တန်းအစီအမံများကိုစစ်ဆေးခြင်းသည်ဤတိုက်ခိုက်မှုများကိုကာကွယ်ရန်ထိရောက်သောနည်းလမ်းများဖြစ်သည်။ ဤဆောင်းပါးတွင်ဖော်ပြထားသောဥပမာများနှင့်အကောင်းဆုံးအလေ့အကျင့်များသည်အသုံးပြုသူများအားအလားအလာရှိသောလုံခြုံရေးခြိမ်းခြောက်မှုများမှကာကွယ်ရန်ပိုမိုလုံခြုံသော PHP application များတည်ဆောက်ရန်မျှော်လင့်ပါသည်။