0

PHP တြင္ Cross-Site Scripting (XSS) Attack ကာကြယ္ရန္

Friday, September 7, 2018
Share this Article on :
#Zawgyi
(အောက်တွင် ယူနီဖောင့်ပါသည်)

နည္းလမ္းမ်ား

Cross-Site Scripting ျဖစ္ပြားျခင္းဟာ web developer မ်ားအေနျဖင့္ သင္ဖန္တီးထားေသာ website ၏ coding ပိုင္း၏ အားနည္းခ်က္ေၾကာင့္ ျဖစ္သည္။ PHP တြင္ မယုံၾကည္ရေသာ data မ်ားကို Filter လုပ္နိုင္ေသာ function
မ်ားရွိေပသည္။ Web developer မ်ားအေနျဖင့္ သင္ဖန္တီးေသာ website ၏ coding ပိုင္းတြင္ Filter လုပ္ထားမယ္ဆိုရင္ Hidden Form Field မ်ား၊ Query String မ်ား၊ plain page မ်ားတြင္ security အားနည္းေသာ coding မ်ားပါဝင္လာပါက ၄င္းတို႔ကို ေဖာ္ျပေပလိမ့္မည္။ ဒါေၾကာင့္ injection ျဖစ္ပြားျခင္းကို ကာကြယ္ရန္ data မ်ားကို e×ternal process (သို႔) database သို႔ မေရာက္ခင္ input ေနရာမ်ားကို validation လုပ္ထားရမယ္။ အဲဒီလို Security
ေကာင္းမြန္ေစရန္ ေထာက္ပံ့ေပးမည့္ function မ်ားစြာ ရွိပါသည္။ အဲဒါတြကေတာ့ ပထမဆုံးအေနျဖင့္ htmlspecialchars( )ပဲျဖစ္ပါတယ္။ ဒီ function ဟာ သာမန္ character မွေန html မွနားလည္ေသာ string အျဖစ္ေျပာင္းလဲ ေပးတဲ့အတြက္ web developer မ်ားအတြက္ အရမ္းကိုအသုံးဝင္ပါတယ္။ web developer မ်ားအေနျဖင့္ html character မ်ားကို translate လုပ္၍သုံးလိုပါက htmlspecialchars( ) command
ကို အသုံးျပဳ နိုင္ပါတယ္။ html character အျဖစ္ translate လုပ္ျခင္းကို ေအာက္ပါနမူနာ အေနျဖင့္ ေတြ႕နိုင္ပါတယ္။



• '&' (ampersand) becomes '&'

• '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.

• "'" (single quote) becomes ''' only when ENT_QUOTES is set.

• '<' (less than) becomes '&lt;'

• '>' (greater than) becomes '&gt;'
htmlspecialchars( ) ေရးသားပုံု နမူနာေလးတစ္ခုကို ေဖာ္ျပလိုက္ပါတယ္။



Example #1 htmlspecialchars() example

<?php $new = htmlspecialchars("<a href='test'>Test </a>", ENT_QUOTES); echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; ?>



အခုေနာက္တစ္နည္း အေနျဖင့္ addslashes( )သုံးနည္းကို ေျပာျပခ်င္ပါတယ္။

ဒီ function ကိုသုံးျခင္းျဖင့္ database queries ထဲက character ေတြျဖစ္တဲ့ single quote (”), double quote (‘), backslash (\) ႏွင့္ NULL အစရွိေသာ character မ်ားကို string အျဖစ္သို႔ အလိုအေလ်ာက္ ေျပာင္းေပးနိုင္ပါတယ္။
ဥပမာအေနျဖင့္ addslashes ( ) အသုံးျပဳပုံ နမူနာေလးကို ေအာက္တြင္ ေဖာ္ျပေပးထားပါတယ္။


Example #1 An addslashes() example

<?php $str = "Is your name O'reilly?"; // Outputs: Is your name O\'reilly? echo addslashes($str); ?>



ေရ႕ွဆက္၍ ထပ္မံေဖာ္ျပခ်င္တဲ့ command ကေတာ့ mysql_real_escape_string ( ) ပဲျဖစ္ပါတယ္။ mysql_real_escape_string ကို MySQL’s library function လို႔လဲေခၚနိုင္ပါတယ္။ ဒီ function ဟာ backslashe မ်ားကို \×00, \n, \r, \, ”, ‘ ႏွင့္ \×la အစရွိေသာ character မ်ားအေနျဖင့္ ေျပာင္းလဲေပးပါတယ္။ ဒီ function ကိုသုံးျခင္းျဖင့္ MySQL သို႔ query ကို မပို႔ခင္ data ေတြကို လုံၿခဳံေအာင္ ျပဳလုပ္ေပးပါတယ္။ mysql_real_escape_string ( ) ေရးသားပုံ နမူနာေလးကို ေအာက္တြင္ ေဖာ္ျပထားပါတယ္။


Example #1 Simple mysql_real_escape_string() example

<?php // Connect $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') OR die(mysql_error()); // Query $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?>



ဒီနမူနာကေတာ့ SQL Injection Attack ျဖစ္ပြားနိုင္သည့္ Security အတြက္ အားနည္းေသာ ေရးသားနည္းပဲ ျဖစ္ပါတယ္။



Example #2 An example SQL Injection Attack

<?php // We didn't check $_POST['password'], it could be anything the user wanted! For example: $_POST['username'] = 'aidan'; $_POST['password'] = "' OR ''='"; // Query database to check if there are any matching users $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; mysql_query($query); // This means the query sent to MySQL would be: echo $query; ?>



ထိုသို႔ ေရးသားျခင္းျဖင့္ hacker တစ္ေယာက္ဟာ password မလိုဘဲ log in လုပ္သြားနိုင္ပါလိမ့္မယ္။ ထိုသို႔မျဖစ္ေစရန္ အထက္တြင္ ေဖာ္ျပထားေသာ နမူနာေလးကို ေလ့လာ၍ Security ေကာင္းမြန္ေစရန္ ထိန္းသိမ္းထား သင့္ေပ သည္။ ယခုေဖာ္ျပခဲ့ေသာ ဉပမာမ်ားသည္ Web developer မ်ားအတြက္ Security ေကာင္းမြန္ေသာ website တစ္ခုဖန္တီးနိုင္ေစရန္ ရည္႐ြယ္၍ ေဖာ္ျပရျခင္းျဖစ္ပါတယ္။ ေနာက္ထပ္ function မ်ားအေၾကာင္းကိုလည္း
ထပ္မံ ၍ေဖာ္ျပပါအုံးမည္……

စာဖတ္သူအေပါင္း႐ြင္လန္းခ်မ္းေျမ့နိုင္ပါေစ။
=================================

#Unicode
နည်းလမ်းများ



Cross-Site Scripting ဖြစ်ပွားခြင်းဟာ web developer များအနေဖြင့် သင်ဖန်တီးထားသော website ၏ coding ပိုင်း၏ အားနည်းချက်ကြောင့် ဖြစ်သည်။ PHP တွင် မယုံကြည်ရသော data များကို Filter လုပ်နိုင်သော function

များရှိပေသည်။ Web developer များအနေဖြင့် သင်ဖန်တီးသော website ၏ coding ပိုင်းတွင် Filter လုပ်ထားမယ်ဆိုရင် Hidden Form Field များ၊ Query String များ၊ plain page များတွင် security အားနည်းသော coding များပါဝင်လာပါက ၎င်းတို့ကို ဖော်ပြပေလိမ့်မည်။ ဒါကြောင့် injection ဖြစ်ပွားခြင်းကို ကာကွယ်ရန် data များကို e×ternal process (သို့) database သို့ မရောက်ခင် input နေရာများကို validation လုပ်ထားရမယ်။ အဲဒီလို Security

ကောင်းမွန်စေရန် ထောက်ပံ့ပေးမည့် function များစွာ ရှိပါသည်။ အဲဒါတွကတော့ ပထမဆုံးအနေဖြင့် htmlspecialchars( )ပဲဖြစ်ပါတယ်။ ဒီ function ဟာ သာမန် character မှနေ html မှနားလည်သော string အဖြစ်ပြောင်းလဲ ပေးတဲ့အတွက် web developer များအတွက် အရမ်းကိုအသုံးဝင်ပါတယ်။ web developer များအနေဖြင့် html character များကို translate လုပ်၍သုံးလိုပါက htmlspecialchars( ) command

ကို အသုံးပြု နိုင်ပါတယ်။ html character အဖြစ် translate လုပ်ခြင်းကို အောက်ပါနမူနာ အနေဖြင့် တွေ့နိုင်ပါတယ်။







• '&' (ampersand) becomes '&amp;'



• '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.



• "'" (single quote) becomes '&#039;' only when ENT_QUOTES is set.



• '<' (less than) becomes '&lt;'



• '>' (greater than) becomes '&gt;'

htmlspecialchars( ) ရေးသားပုံ နမူနာလေးတစ်ခုကို ဖော်ပြလိုက်ပါတယ်။







Example #1 htmlspecialchars() example



<?php $new = htmlspecialchars("<a href='test'>Test </a>", ENT_QUOTES); echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; ?>







အခုနောက်တစ်နည်း အနေဖြင့် addslashes( )သုံးနည်းကို ပြောပြချင်ပါတယ်။



ဒီ function ကိုသုံးခြင်းဖြင့် database queries ထဲက character တွေဖြစ်တဲ့ single quote (”), double quote (‘), backslash (\) နှင့် NULL အစရှိသော character များကို string အဖြစ်သို့ အလိုအလျောက် ပြောင်းပေးနိုင်ပါတယ်။

ဥပမာအနေဖြင့် addslashes ( ) အသုံးပြုပုံ နမူနာလေးကို အောက်တွင် ဖော်ပြပေးထားပါတယ်။





Example #1 An addslashes() example



<?php $str = "Is your name O'reilly?"; // Outputs: Is your name O\'reilly? echo addslashes($str); ?>







ရှေ့ဆက်၍ ထပ်မံဖော်ပြချင်တဲ့ command ကတော့ mysql_real_escape_string ( ) ပဲဖြစ်ပါတယ်။ mysql_real_escape_string ကို MySQL’s library function လို့လဲခေါ်နိုင်ပါတယ်။ ဒီ function ဟာ backslashe များကို \×00, \n, \r, \, ”, ‘ နှင့် \×la အစရှိသော character များအနေဖြင့် ပြောင်းလဲပေးပါတယ်။ ဒီ function ကိုသုံးခြင်းဖြင့် MySQL သို့ query ကို မပို့ခင် data တွေကို လုံခြုံအောင် ပြုလုပ်ပေးပါတယ်။ mysql_real_escape_string ( ) ရေးသားပုံ နမူနာလေးကို အောက်တွင် ဖော်ပြထားပါတယ်။





Example #1 Simple mysql_real_escape_string() example



<?php // Connect $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') OR die(mysql_error()); // Query $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?>







ဒီနမူနာကတော့ SQL Injection Attack ဖြစ်ပွားနိုင်သည့် Security အတွက် အားနည်းသော ရေးသားနည်းပဲ ဖြစ်ပါတယ်။







Example #2 An example SQL Injection Attack



<?php // We didn't check $_POST['password'], it could be anything the user wanted! For example: $_POST['username'] = 'aidan'; $_POST['password'] = "' OR ''='"; // Query database to check if there are any matching users $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; mysql_query($query); // This means the query sent to MySQL would be: echo $query; ?>







ထိုသို့ ရေးသားခြင်းဖြင့် hacker တစ်ယောက်ဟာ password မလိုဘဲ log in လုပ်သွားနိုင်ပါလိမ့်မယ်။ ထိုသို့မဖြစ်စေရန် အထက်တွင် ဖော်ပြထားသော နမူနာလေးကို လေ့လာ၍ Security ကောင်းမွန်စေရန် ထိန်းသိမ်းထား သင့်ပေ သည်။ ယခုဖော်ပြခဲ့သော ဉပမာများသည် Web developer များအတွက် Security ကောင်းမွန်သော website တစ်ခုဖန်တီးနိုင်စေရန် ရည်ရွယ်၍ ဖော်ပြရခြင်းဖြစ်ပါတယ်။ နောက်ထပ် function များအကြောင်းကိုလည်း

ထပ်မံ ၍ဖော်ပြပါအုံးမည်……



စာဖတ်သူအပေါင်းရွင်လန်းချမ်းမြေ့နိုင်ပါစေ။


Artikel Terkait:

0 comments:

Post a Comment