PDA

View Full Version : سوال: sql injection و تابع intval



Mohammadrezag
چهارشنبه 25 شهریور 1388, 21:27 عصر
سلام دوستان و اساتيد گرامي !

کد PHP:

$NewsID = intval( $_GET[ 'ID' ]);
$SQL = "SELECT * FROM `news` WHERE `ID` = $NewsID LIMIT 0,1";


به نظرتون اين راه راه مطمئني براي جلوگيري از تزريق دستور به اس كيو ال هست ؟!
البته به نظر من كه هست ! چون به هيچ عنوان نمي شه دستور رو از اين رد كرد !
چون دستور تبديل به INT مي شه بعد كوئري گرفته مي شه ! پس دستوري تزريق نمي شه !
حالا ممنون مي شم شما دوستان عزيز نظرتون رو بفرماييد !

narsic
پنج شنبه 26 شهریور 1388, 19:35 عصر
با سلام
بله این راه رو نمیشه دور زد .

Sajjad.Aghapour
پنج شنبه 26 شهریور 1388, 20:39 عصر
جلوگیری از تزریق بستگی به شما و آشنایی شما با نحوه تزریق داره......
راه های دیگه ای هم وجود داره.مثلا:


$id = preg_replace("/[^0-9]/","",$_REQUEST['id'])

alihoseini
جمعه 27 شهریور 1388, 23:58 عصر
با تبديل به int اگر مقدار رشته اي به متغير پاس بشه اونو به صفر تبديل ميكنه و ميشه از اين طريق از injection جلوگيري كرد ولي به شرطي كه تمام فيلدهات عدد باشند
اگر يك فيلد متني مثل توضيحات داشته باشي ديگه اين روش كارايي نداره

به نظر من با validate كامل فيلدهاي يك فرم ميشه از injection جلوگيري كرد (فرضاً ميدوني تمام كاراكترهاي فيلد توضيحاتت بايد حروف فارسي باشه اگر غير از اون بود غيرمعتبر هست و ...)

soheil.moradi
یک شنبه 29 شهریور 1388, 02:04 صبح
به نظر من يک فانکشن نوشته بشه که توش اعداد و حروف را چک بکنه، برای خیلی از SELECT ها بدرد میخوره، مثل این:

<?php
function MakeSafe($string)
{
$string = mysql_real_escape_string($string);
if(preg_match("/^([A-Za-z0-9]+)$/", $string)):
return $string;
endif;
}
?>

nimatramon
یک شنبه 29 شهریور 1388, 19:47 عصر
دوست عزیز از mysal_real_escape_string هم می تونی استفاده کنی