کمک برای جلوگیری از SQL Injection
سلام
داشتم یه برنامه چک میکردم
متوجه شدم mysql_real_escape_string به تنهایی نمیتونه جلوی این حمله رو بگیره
بهتره که stripslashes استفاده بشه و همچنین ورودی ها فیلتر بشن
مثلا اگه محتوا عددی هست بهتره از این استفاده کرد :
if (is_numeric($id))
بعدش ادامه کارو رفت
حالا من سوال دارم
1- از stripslashes و mysql_real_escape_string استفاده بشه ؟
2- برای اعداد این کد رو میزنم اول :
$sid=preg_replace('#[^0-9]#i','',$_GET['id']);
3- برای اعداد و حروف انگلیسی :
$sid=preg_replace('#[^A-Z-a-z-0-9]#i','',$_GET['id']);
4- برای اعداد و حروف انگلیسی و حروف فارسی :
$sid=preg_replace('#[^A-Z-a-z-0-9\ا\ب\پ\ت\ث\ج\چ\ح\خ\د\ذ\ر\ز\ژ\س\ش\ ص\ض\ط\ظ\ع\غ\ف\ق\ک\گ\ل\م\ن\و\ه\ی\ك \آ\ي\ئ]#i','',$_GET['id']);
اگه مورد 2 استفاده بشه و تمام ورودی ها فقط عدد بشن ، آیا نیاز به مورد 1 هست ؟
مورد 4 از نظر منطقی صحیح هست ؟
ممنون
نقل قول: کمک برای جلوگیری از SQL Injection
مورد 4 رو نمی دونم تا حالا ندیده بودم، ولی مورد 3 کار 2 رو می کنه و در ورودی کاراکترها هم باید از escape استفاده کنید..
شما به جای مورد 4 می تونید از htmlspecialchars و urldecode استفاده کنید، البته دیکد کردن وقتی هست که ورودی شما هنگام ارسال انکد بشه
نقل قول: کمک برای جلوگیری از SQL Injection
مشکل دیکد کردن نیست
مشکل ورودی برای کشیدن اطلاعات به بیرون هست
فرض کنیم قرار در سایت جستجو بشه
خب اطلاعات رو بر اساس GET میگیره دیگه
این متغیر رو حتما باید escape کنیم یا با فیلتر کردن مورد 4 مشکل حل میشه ؟
نقل قول: کمک برای جلوگیری از SQL Injection
ببینید وقتی htmlspecialchars میزنید کاراکترهای غیر مجاز رو مجاز می کنه و وقتی در نهایت هم escape می کنید دیگه نیازی به مورد 4 نیست، برای حروف فارسی هم می تونید از انکد و دیکد استفاده کنید که به اعداد و حروف انگلیسی تبدیل بشه پس 4 حذف میشه..
نقل قول: کمک برای جلوگیری از SQL Injection
mamali-mohammad یه بار از PDO استفاده کن ، یه عمر شب آسوده بخواد .
دیگه این دنگ و فنگ هارو نداری
نقل قول: کمک برای جلوگیری از SQL Injection
سلام
این تابع رو جناب eshpilen نوشتن. عالیه...
function quote_smart($value, $identifier=false)
{
if(!is_numeric($value)) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
if(!$identifier) return "'" .mysql_real_escape_string($value) . "'";
else if(strpos($value, '`')===false) return '`' .$value . '`';
else {
$this->error("Value contains invalid character (backtick - '`') for identifiers");
return false;
}
}
else return $value;
}
فقط کافیه مقدیر رو بدن هیچ کوتیشنی ( " or ' ) بهش بدین
نقل قول: کمک برای جلوگیری از SQL Injection
نقل قول:
نوشته شده توسط
colors
سلام
این تابع رو جناب eshpilen نوشتن. عالیه...
function quote_smart($value, $identifier=false)
{
if(!is_numeric($value)) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
if(!$identifier) return "'" .mysql_real_escape_string($value) . "'";
else if(strpos($value, '`')===false) return '`' .$value . '`';
else {
$this->error("Value contains invalid character (backtick - '`') for identifiers");
return false;
}
}
else return $value;
}
فقط کافیه مقدیر رو بدن هیچ کوتیشنی ( " or ' ) بهش بدین
من از این سورس به این صورت استفاده میکنم اونو قرار می دم در داخل کلاس خودم و به این صورت در متدهای post و get صدا می زنم درسته
$id=$class->quote_smart($_GET['id']);
$name=$class->quote_smart($_post['name']);
نقل قول: کمک برای جلوگیری از SQL Injection
نقل قول:
نوشته شده توسط
soroush.r70
من از این سورس به این صورت استفاده میکنم اونو قرار می دم در داخل کلاس خودم و به این صورت در متدهای post و get صدا می زنم درسته
$id=$class->quote_smart($_GET['id']);
$name=$class->quote_smart($_post['name']);
بله درسته...