PDA

View Full Version : فیلتر کردن مقادیر ورودی(GET) برای استفاده در دستورات SQL



ali reza mansoori 2
چهارشنبه 22 مرداد 1393, 13:15 عصر
سلام دوستان
یه مقدار دارم که توسط GET باید ارسال بشه و داخل صفحه ای که دریافتش میکنم یه کوئری اجرا میشه

"`profi` LIKE %" . quote_smart($_GET['text']) . "%)"
و تابعی که استفاده میکنم این هستش

function quote_smart($value){ if(!is_numeric($value)) { if(get_magic_quotes_gpc()) $value = stripslashes($value); return "'" .mysql_real_escape_string($value) . "'"; } else return $value; }

خروجی مثل زیر میشه که اشکال داره

%'salam'%
حالا سوال من اینه که وقتی که دارم از LIKE در دستورات SQL استفاده میکنم و در کد نویسی دو طرف مقدار ورودی % اضافه میکنم نیازی هست که از تابع quote_smart استفاده کنم یا نه
برای امنیت مشکلی پیش نمیاد

Yousha
یک شنبه 23 شهریور 1393, 14:12 عصر
سوالت گنگ/نا مفهوم هستش، اصلاحش کن...
او کوئری رو هم کاملتر/بیشتر بزار تا بهتر درکش کنیم.
بعدم اون تابع رو میتونی اینطوری بنویسی، که کمی بهینه تره:


function quote_smart($value)
{
if(!is_numeric($value))
{
if(get_magic_quotes_gpc()) $value = stripslashes($value);
if (function_exists('mysql_real_escape_string')) return mysql_real_escape_string($value);
else return mysqli_real_escape_string($value);
}

return $value;
}

omidabedi
یک شنبه 23 شهریور 1393, 17:56 عصر
تابع get_magic_quotes_gpc که خودش باگ داره و قابل دور زدن هست

از تابع htmlentities و strip_tags استفاده کنید

و برای امنیت بیشتر و منعطف تر از پروژه ی html purifier استفاده کنید

برای ذخیره در دیتابیس هم تابع mysql_real_escape_string که deprecated شده بجاش میتونید از mysqli یا از تابع فانکشن prepare در PDO استفاده کنید

برای اموزش هر کدومشونم سرچ کنید یا توی انجمن سوالتون رو مطرج کنید