PDA

View Full Version : سوال: جند سوال در مورد معتبر سازی و فیل.تر داده ها و جلوگیری از sql injection



miladanimator
شنبه 20 آذر 1389, 23:02 عصر
با سلام

در مورد معتبر سازی داده های php ، و جلوگیری از sql injection و ... ، چند سوال دارم که ممنون میشم جواب داده بشه .

خیلی سرچ کردم و در این باره بحث های زیادی خوندم . حالا می خوام ببینم عملیات زیر کافیست یا خیر ؟
1- اول از همه اینکه آیا داده هایی که با md5 یا sha1 کد می کنیم ، نیازی هست قبل از کد کردن ، اعتبار سنجی شوند ؟ یا خیر ؟
2- برای امنیت داده های عددی ، استفاده از تابع int کافیست ؟ مثال : $a=(int)($_POST['adad'])
3- بهتر است از int استفاده کنیم یا از intval؟
برای معتبر سازی کلی داده ها ، از تابع زیر استفاده می کنم . آیا کفایت می کند ؟ یا کمکی می تونید در جهت بهبود و کامل تر شدن این تابع کنید ؟


function sec( $value )
{
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0
if ($new_enough_php)
{ // PHP v4.3.0 or higher
// undo any magic quote effects so mysql_real_escape_string can do the work
if ($magic_quotes_active)
{
$value = stripslashes($value);
}
$value = mysql_real_escape_string($value);
} else
{ // before PHP v4.3.0
// if magic quotes aren't already on then add slashes manually
if (!$magic_quotes_active)
{
$value = addslashes($value);
}
// if magic quotes are active, then the slashes already exist
}

$value = htmlentities($value ,ENT_QUOTES,'UTF-8');

return $value ;
}


4. و اما یک مشگل هم دارم . زمانی که بوسیله تابع فوق ، محتوای یک textarea که کاربر وارد کرده و با دکمه اینتر در بین داده ورودی ، به خط های بعدی رفته ، می گیرم ، به جای خط بعد در داده ورودی ، \r\n ذخیره می شود و باز هنگام نمایش اطلاعات از دیتابیس و فیلتر اطلاعات به وسیله تابع فوق ، این مشکل باقیست .

5. و سوال آخر اینکه برای امنیت و سرعت بیشتر ، استفاده از موارد فوق بهتر است و یا استفاده از توابع filter_var و اینکه آیا توابع filter_var برای جلوگیری از حملات sql injection , xss , … کفایت می کند ؟

UnnamE
یک شنبه 21 آذر 1389, 08:44 صبح
بهتر هست در مورد preg_match و كنترل داده هاي ورودي و عبارات منظم تحقيق كن!