PDA

View Full Version : سوال: افزایش امنیت در ارسال مقادیر به دیتابیس و جلوگیری از SQL injection



hamidhassas
شنبه 08 شهریور 1393, 09:53 صبح
من چطوری میتونم سطح امنیت در مقادیر ارسال شده به سمت دیتابیس رو که با متد های GET و POST انجام میشه رو افزایش بدم

یک کد برای نمونه قرار دادم اگه چیز خاص دیگه ای هم وجود داره که میشه به این تابع اضافه کرد و یا راه حل دیگه ای هم هست قرار بدیدن


function check_numbers($value)
{
str_replace("'","''",$value);
addslashes($value);
mysql_real_escape_string($value);
ctype_digit($value);
(int)$value;
htmlentities($value);
htmlspecialchars($value);
escapeshellcmd($value);
escapeshellarg($value);
//فقط عدد
preg_match('/^[0-9]{1,10}$/', $value);
//فقط حروف
//preg_match('/^[a-zA-Z]{1,32}$/', $value);
// فقط عدد و حروف
//preg_match('/^[a-zA-Z0-9]{1,32}$/', $value);
//فاصله دو طرف مقدار را حذف میکند
trim($value);
return($value);
}
echo $post_id=check_numbers($_GET['post']);



if(isset($post_id)
{
$post=mysql_query("SELECT * FROM `news` WHERE `id`='".$post_id."'");
}


این هم یک مقاله که از صحت درستی و اطمینان آن مطمئن نیستم http://hassas-computer.com/preview.php?post=451

لطفا دوستان هر کدی و یا راه کاری که جهت افزایش امنیت میشه انجام داد رو با ذکر توضیحات دقیق و کاربردی قرار بده تا دیگرون هم بتونن ازش استفاده کنن

smksmk
شنبه 08 شهریور 1393, 10:21 صبح
سلام ، در مورد مثال شما که قراره عدد باشه is_numeric() کافیه .
در مورد مثلاً نام کاربری و کلمه عبور لازم نیست که replace کنین ، استفاده از preg_match کافیه :

preg_match('/^[a-zA-Z0-9 _.-]+$/', $_POST['username'])


و در مورد متن و محتوای ورودی کاربر که دیگه لازمه فیلتر انجام بشه :
mysql_real_escape_string()

hamidhassas
شنبه 08 شهریور 1393, 10:39 صبح
آیا تابعی که نوشتم طرز استفادش درسته