یکی از مباحث مورد علاقه ی هکر ها بحث SQL injection می باشد، در این روش هکر با تزریق کد های SQL به یک فایل php اطلاعات مورد نیاز خود را از دیتابیس به دست می آورد.این اطلاعات ممکن است نام کاربری و کلمات عبور،ایمیل ها و هر اطلاعات مهم دیگر باشد.
در PHP روش های مختلفی برای اینکار توصیه شده است.اما در این مطلب کوتاه قصد داریم با یک تابع کوچک جلوی این حملات را بگیریم!
از آنجایی که حملات از طریق فرم ها انجام می شود پس باید اطلاعات دریافتی از فرم ها قبل از پردازش و استفاده در برنامه امن شوند!
نمونه زیر یک دریافت فرم خطرناک است که اطلاعات آن قبل از پردازش ف..تر نشده اند و به راحتی منجر به نفوذ هکر خواهد شد:
$name= $_GET[‘name’];
در اینجا متغییر $name اطلاعات را توسط متود get دریافت می کند, اما خبری از ایمن سازی و بررسی اطلاعات ارسالی get نیست ! استفاده از این متغییر در دیتابیس جهت جستجو یا ویرایش یا حتی حذف اشتباه هست!
اما چگونه مقادیر get را امن کنیم؟ راه حل عبور اطلاعات از یک صافی هست,این صافی متشکل شده از سه تابع می باشد که جهت سهولت در یک تابع مورد استفاده قرار می دهیم.
توابع stripslashes ,mysql_real_escape_string و addslashes .
شکل کلی تابع و نحوه استفاده از آن :
function sqi( $value ){
if( get_magic_quotes_gpc() ){
$value = stripslashes( $value );
}
if( function_exists( “mysql_real_escape_string” ) ){
$value = mysql_real_escape_string( $value );
}
else
{
$value = addslashes( $value );
}
return $value;
}$name= $_GET[‘name’];
$name= sqi($name);
در فایل بالا متغییر $name دارای امنیت کافی می باشد! البته ما در این مثال از دستور get استفاده کردیم, متود های ارسالی post و همچنین خواندن اطلاعات کوکی ها باید با این روش امن شوند.
$_COOKIE[”]
$_REQUEST[”]
عالی بود
ممنون
تو سایت php.net زده که تابع mysql_real_escape_string دیگه کاربرد نداره بجاش از PDO استفاده بشه. چرا؟
تو نسخه های جدید PHP کاربرد نداره؛ چون استفاده از PDO بسیار امن تر و بهتر است ،
سلام عالی بود
awliii mrc
سلام میشه لینک داخل مطلبو چک کنید.برای من
مشکل داشت.ممنون