PHP дээрх алдаатай жишээнүүд
Жишээ 1
$result=mysql_query('SELECT * FROM users WHERE username="'.$_GET['username'].'"');
Дайралт 1
http://host/?username=testuser' or 2=2
Жишээ 2
$result=mysql_query('SELECT * FROM news WHERE id="'.$_GET['id'].'"');
Дайралт 2
http://host/?id=-1 union select 1,2,3 ...
PHP хэл дээр хамгаалах жишээ 1
PHP хэлний функцуудыг ашиглан хамгаалж болно.
function Query_tseverleh($string)
{
// "\" тэмдэгтийн давхцал үүсгэхээс сэргийлэх
if(get_magic_quotes_gpc())
{
$string = stripslashes($string);
}
if (phpversion() >= '4.3.0')
{
$string = mysql_real_escape_string($string);
}
else
{
$string = mysql_escape_string($string);
}
return $string;
}
Хэрэглэгчийн нэрийг формоор дамжуулан авахдаа дараах хэлбэрийн коде бичиж сэргийлнэ.
if (isset($_GET['username']))
{
$hereglegch = Query_tseverleh($_GET['username']);
...
$result=mysql_query('SELECT * FROM news WHERE id="'.$hereglegch.'"');
...
}
PHP хэл дээр хамгаалах жишээ 2
PHP хэлний "mysqli" нэмэлт санг(http://www.php.net/mysqli) хэрэглэн хамгаалж болно. PHP 4.1-ээс дээших хувилбар дээр ажиллах болно.
$db = new mysqli("localhost", "username", "password", "database");
$stmt = $db -> prepare("SELECT username FROM testUsers
WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
// Bind параметрүүд s - string, b - boolean, i - int, г.м
$stmt -> execute();
$stmt -> bind_results($result);
$stmt -> fetch();
echo "Username=" . $result ;
$stmt -> close();
...
Bayrlalaa amjilt
ReplyDeletedajgui zovlogoo baina, thanks
ReplyDeleteгоё блог байна амжилт хүсье :)
ReplyDelete