PHP Form Validation
ဤနှင့် နောက်အခန်းများတွင် ဖောင်ဒေတာကို တရားဝင်အောင်ပြုလုပ်ရန် PHP အသုံးပြုနည်းကို ပြသထားသည်။
PHP Form Validation
PHP ဖောင်များကို လုပ်ဆောင်သောအခါ လုံခြုံရေးကို စဉ်းစားပါ။
ဤစာမျက်နှာများသည် PHP ဖောင်များကို လုံခြုံရေးစိတ်ဖြင့် မည်သို့လုပ်ဆောင်ရမည်ကို ပြသပါမည်။ သင့်ဖောင်ကို ဟက်ကာများနှင့် spammer များထံမှ ကာကွယ်ရန် မှန်ကန်သော ဖောင်ဒေတာကို မှန်ကန်စွာအတည်ပြုခြင်းသည် အရေးကြီးပါသည်။
ဤအခန်းများတွင် ကျွန်ုပ်တို့လုပ်ဆောင်မည့် HTML ဖောင်တွင် ထည့်သွင်းမှုနယ်ပယ် အမျိုးမျိုးပါရှိသည်- လိုအပ်သော၊ ရွေးချယ်နိုင်သော စာသားအကွက်များ၊ ရေဒီယိုခလုတ်များနှင့် တင်သွင်းရန် ခလုတ်တစ်ခု ပါဝင်သည်-
အထက်ဖော်ပြပါ ဖောင်အတွက် တရားဝင် စည်းကမ်းချက်များမှာ အောက်ပါအတိုင်း ဖြစ်ပါသည်။
Field | Validation Rules |
---|---|
Name | Required. + Must only contain letters and whitespace |
Required. + Must contain a valid email address (with @ and .) | |
Website | Optional. If present, it must contain a valid URL |
Comment | Optional. Multi-line input field (textarea) |
Gender | Required. Must select one |
ပထမဦးစွာ ဖောင်အတွက် ရိုးရိုး HTML ကုဒ်ကို ကြည့်ပါမည်။
စာသားအကွက်များ
အမည်၊ အီးမေးလ်နှင့် ဝဘ်ဆိုက်အကွက်များသည် စာသားထည့်သွင်းသည့်ဒြပ်စင်များဖြစ်ပြီး မှတ်ချက်အကွက်သည် စာသားဧရိယာတစ်ခုဖြစ်သည်။ HTML ကုဒ်သည် ဤကဲ့သို့ ဖြစ်သည်-
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
ရေဒီယိုခလုတ်များ
ကျားမအကွက်များသည် ရေဒီယိုခလုတ်များဖြစ်ပြီး HTML ကုဒ်သည် ဤကဲ့သို့ဖြစ်နေသည်-
Gender:
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
ဖောင်ဒြပ်စင်
ဖောင်၏ HTML ကုဒ်သည် ဤကဲ့သို့ ဖြစ်သည်-
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
ဖောင်ကို တင်သွင်းသောအခါ၊ ဖောင်ဒေတာကို method="post" ဖြင့် ပေးပို့သည်။
$_SERVER["PHP_SELF"] ပြောင်းလဲနိုင်သည်မှာ အဘယ်နည်း။
$_SERVER["PHP_SELF"] သည် လက်ရှိလုပ်ဆောင်နေသော script ၏ ဖိုင်အမည်ကို ပြန်ပေးသည့် စူပါကမ္ဘာလုံးဆိုင်ရာ ကိန်းရှင်တစ်ခုဖြစ်သည်။
ထို့ကြောင့်၊ $_SERVER["PHP_SELF"] သည် မတူညီသောစာမျက်နှာသို့ ခုန်တက်မည့်အစား စာမျက်နှာကိုယ်တိုင်ထံသို့ တင်သွင်းထားသော ပုံစံဒေတာကို ပေးပို့ပါသည်။ ဤနည်းအားဖြင့်၊ အသုံးပြုသူသည် ဖောင်ပုံစံနှင့် တူညီသောစာမျက်နှာပေါ်တွင် အမှားအယွင်း မက်ဆေ့ချ်များကို ရရှိမည်ဖြစ်သည်။
htmlspecialchars() function ကဘာလဲ။
htmlspecialchars() လုပ်ဆောင်ချက်သည် အထူးဇာတ်ကောင်များကို HTML entities အဖြစ် ပြောင်းလဲပေးသည်။ ဆိုလိုသည်မှာ ၎င်းသည် < နှင့် > ကဲ့သို့သော HTML စာလုံးများကို < နှင့် > ၎င်းသည် တိုက်ခိုက်သူများသည် HTML သို့မဟုတ် Javascript ကုဒ် (Cross-site Scripting attacks) ကို ပုံစံများဖြင့် ထည့်သွင်းခြင်းဖြင့် ကုဒ်ကို အသုံးချခြင်းမှ တားဆီးပေးသည်။
PHP Form Security တွင် မှတ်စုကြီးတစ်ခု
$_SERVER["PHP_SELF"] ပြောင်းလဲမှုအား ဟက်ကာများက အသုံးပြုနိုင်သည်။
အကယ်၍ PHP_SELF ကို သင့်စာမျက်နှာတွင်အသုံးပြုပါက၊ အသုံးပြုသူတစ်ဦးသည် မျဥ်းစောင်း (/) ကိုရိုက်ထည့်ပြီးနောက် အချို့သော Cross Site Scripting (XSS) command များကို လုပ်ဆောင်နိုင်သည်။
Cross-site scripting (XSS) သည် web applications များတွင် တွေ့ရလေ့ရှိသော ကွန်ပျူတာ လုံခြုံရေး အားနည်းချက် အမျိုးအစားတစ်ခုဖြစ်သည်။ XSS သည် တိုက်ခိုက်သူများအား အခြားအသုံးပြုသူများကြည့်ရှုသည့် ဝဘ်စာမျက်နှာများအတွင်းသို့ ကလိုင်းယင့်ဘက်ခြမ်း script ကို ထိုးသွင်းနိုင်သည်။
"test_form.php" ဟု အမည်ပေးထားသော စာမျက်နှာတစ်ခုတွင် အောက်ပါပုံစံ ရှိသည် ဟု ယူဆပါ။
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
ယခု၊ အကယ်၍ အသုံးပြုသူတစ်ဦးသည် "http://www.example.com/test_form.php" ကဲ့သို့သော လိပ်စာဘားတွင် ပုံမှန် URL ကို ထည့်သွင်းပါက၊ အထက်ပါ ကုဒ်ကို ဘာသာပြန်ဆိုပါမည်။
<form method="post" action="test_form.php">
ဝေးလေကောင်းလေ။
သို့သော်၊ အသုံးပြုသူတစ်ဦးသည် လိပ်စာဘားတွင် အောက်ပါ URL ကို ထည့်သွင်းရန် စဉ်းစားပါ။
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
ဤကိစ္စတွင်၊ အထက်ပါကုဒ်ကို ဘာသာပြန်ဆိုပါမည်။
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
ဤကုဒ်သည် script tag နှင့် သတိပေးချက်တစ်ခု ပေါင်းထည့်သည်။ စာမျက်နှာကိုဖွင့်သောအခါ၊ JavaScript ကုဒ်ကိုလုပ်ဆောင်လိမ့်မည် (အသုံးပြုသူသည်သတိပေးချက်အကွက်ကိုတွေ့လိမ့်မည်) ။ ဤသည်မှာ PHP_SELF variable ကို မည်သို့အသုံးချနိုင်သည်ကို ရိုးရှင်းပြီး အန္တရာယ်မရှိသော ဥပမာတစ်ခုမျှသာဖြစ်သည်။
<script> tag တွင် မည်သည့် JavaScript ကုဒ်မဆို ထည့်နိုင်သည်ကို သတိပြုပါ ။ ဟက်ကာသည် သုံးစွဲသူအား အခြားဆာဗာတစ်ခုရှိ ဖိုင်တစ်ခုသို့ ပြန်ညွှန်းနိုင်ပြီး၊ ထိုဖိုင်သည် ကမ္ဘာလုံးဆိုင်ရာ ပြောင်းလွဲမှုများကို ပြောင်းလဲနိုင်သည့် အန္တရာယ်ရှိသော ကုဒ်ကို ကိုင်ဆောင်ထားနိုင်ပြီး ဥပမာ၊ ဥပမာ၊ အသုံးပြုသူဒေတာကို သိမ်းဆည်းရန် အခြားလိပ်စာသို့ ဖောင်ကို ပေးပို့နိုင်သည်။
$_SERVER["PHP_SELF"] အမြတ်ထုတ်မှုများကို မည်သို့ရှောင်ရှားရမည်နည်း။
$_SERVER["PHP_SELF"] ၏ အမြတ်ထုတ်မှုများကို htmlspecialchars() လုပ်ဆောင်ချက်ကို အသုံးပြုခြင်းဖြင့် ရှောင်ရှားနိုင်ပါသည်။
ဖောင်ကုဒ်သည် ဤကဲ့သို့ ဖြစ်သင့်သည်-
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() လုပ်ဆောင်ချက်သည် အထူးဇာတ်ကောင်များကို HTML entities အဖြစ် ပြောင်းလဲပေးသည်။ ယခုအသုံးပြုသူသည် PHP_SELF variable ကိုအသုံးချရန်ကြိုးစားပါက၊ ၎င်းသည် အောက်ပါ output ကို ဖြစ်ပေါ်စေလိမ့်မည်-
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
အမြတ်ထုတ်ရန် ကြိုးပမ်းမှု မအောင်မြင်ဘဲ ထိခိုက်မှုမရှိပါ။
ဖောင်ဒေတာကို PHP ဖြင့် အတည်ပြုပါ။
ပထမဦးစွာကျွန်ုပ်တို့လုပ်ရမည့်အရာမှာ PHP ၏ htmlspecialchars() function မှတဆင့် variable အားလုံးကိုဖြတ်သန်းရန်ဖြစ်သည်။
htmlspecialchars() function ကိုသုံးတဲ့အခါ၊ အသုံးပြုသူတစ်ဦးသည် စာသားအကွက်တွင် အောက်ပါတို့ကို တင်ပြရန်ကြိုးစားပါက၊
<script>location.href('http://www.hacked.com')</script>
- ဤကဲ့သို့ HTML အလွတ်ကုဒ်အဖြစ် သိမ်းဆည်းထားသောကြောင့် ၎င်းကို လုပ်ဆောင်မည်မဟုတ်ပါ။
<script>location.href('http://www.hacked.com')</script>
ကုဒ်ကို စာမျက်နှာတစ်ခု သို့မဟုတ် အီးမေးလ်အတွင်းတွင် ပြသရန် ယခုတွင် ဘေးကင်းပါသည်။
အသုံးပြုသူ ဖောင်ကို တင်သွင်းသည့်အခါ နောက်ထပ် အရာနှစ်ခုကိုလည်း လုပ်ဆောင်ပါမည်။
- အသုံးပြုသူထည့်သွင်းသည့်ဒေတာ (PHP trim() လုပ်ဆောင်ချက်ဖြင့်) မလိုအပ်သော စာလုံးများ (အပိုနေရာ၊ တက်ဘ်၊ လိုင်းအသစ်) ကို ဖယ်ထုတ်ပါ။
- အသုံးပြုသူထည့်သွင်းသည့်ဒေတာ (PHP stripslashes() လုပ်ဆောင်ချက်ဖြင့်) backslashes (\) ကို ဖယ်ရှားပါ။
နောက်တစ်ဆင့်မှာ ကျွန်ုပ်တို့အတွက် စစ်ဆေးခြင်းအားလုံးကို လုပ်ဆောင်ပေးမည့် လုပ်ဆောင်ချက်တစ်ခုကို ဖန်တီးရန်ဖြစ်သည် (တူညီသောကုဒ်ကို ထပ်ခါထပ်ခါရေးခြင်းထက် ပိုအဆင်ပြေသည်)။
function test_input() ကို နာမည်ပေးမယ်။
ယခု၊ ကျွန်ုပ်တို့သည် $_POST variable တစ်ခုစီကို test_input() လုပ်ဆောင်ချက်ဖြင့် စစ်ဆေးနိုင်ပြီး script သည် ဤကဲ့သို့ဖြစ်သည်-
ဥပမာ
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
ဇာတ်ညွှန်း၏အစတွင်၊ $_SERVER["REQUEST_METHOD"] ကို အသုံးပြု၍ ဖောင်ကို တင်သွင်းခြင်းရှိမရှိ စစ်ဆေးသည်ကို သတိပြုပါ။ REQUEST_METHOD သည် POST ဖြစ်ပါက ဖောင်ကို တင်သွင်းပြီးဖြစ်သည် - ၎င်းကို အတည်ပြုသင့်သည်။ မတင်သွင်းရသေးပါက၊ အတည်ပြုချက်ကိုကျော်ပြီး ဗလာပုံစံကိုပြသပါ။
သို့ရာတွင်၊ အထက်ဖော်ပြပါ ဥပမာတွင်၊ ထည့်သွင်းမှုအကွက်များအားလုံးသည် ရွေးချယ်ခွင့်ရှိသည်။ အသုံးပြုသူသည် မည်သည့်ဒေတာကိုမျှ မထည့်ပါက script သည် ကောင်းမွန်စွာအလုပ်လုပ်ပါသည်။
နောက်တစ်ဆင့်မှာ လိုအပ်ပါက ထည့်သွင်းမှုအကွက်များ ပြုလုပ်ရန်နှင့် လိုအပ်ပါက အမှားအယွင်း မက်ဆေ့ချ်များ ဖန်တီးပါ။