آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

امنیت داده ورودی با تابع شخصی

hosein  8 سال پیش  8 سال پیش
0 0

سلام

برای امن سازی اطلاعات ورودی به دیتا بیس اگر نمی خواستم از تابع real_escape_string() استفاده کنیم، فقط قصد داشتم هر اطلاعات ورودی رو با متد زیر اعتبار سنجی کنم:

سوال اول اینکه آیا استفاده از این روشها استاندارد هست یا نه؟ یعنی به جای استفاده از متدهای موجود در PHP خودمون یک متد رو بنویسیم.

سوال دوم اینکه آیا همین کدهای نوشته شده، می تونن از SQL Enjection جلوگیری کنند یا نه؟

با تشکر از دوستان

function safeString($string)
{
$string = str_replace("\"","",$string);
$string = str_replace("'","",$string);
$string = str_replace(",","",$string);
$string = str_replace(";","",$string);
$string = str_replace("|","",$string);
$string = str_replace("\`","",$string);
$string = str_replace("\*","",$string);
$string = str_replace(" ","",$string);
$string = str_replace("=","",$string);
$string = str_replace("\n","",$string);
$string = str_replace("\r","",$string);
$string = str_replace("\x1a","",$string);
$string = str_replace("\x1a","",$string);
$string = str_replace("\x00","",$string);
return $string;
}
+1 0
سلام وقتی چنین تابعی از قبل نوشته شده و اپن سورس هست و همه راه های نفوذ رو بسته دلیلی وجود نداره وقت خودمون رو روی این موضوع بزاریم در اینجا میتونید سورس این تابع رو ببینید: لینک (8 سال پیش)
+1 0
ممنون اقای عباسی عزیز بابت لینک، شاید بد توضیح داده باشم، قصد من از نوشتن این تابع در واقع استفاده از متغییرها، قبل از رسیدن به دستورات sql بود و مشخصا از پارامتر دوم تابع real_escape_string نمی خواستم استفاده کنم، احساس می کردم این طور کد هام کمتر می شه و البته قابل فهم تر(حداقل برای خودم) و چون تابعی هم برای امن کردن استرینگ پیدا نکرده بودم، به ترتیب بالا که که می بینید خودم نوشتمش. اما حرف شما خیلی درست هست بهتر از منابع آماده استفاده کنم. ممنون از شما (8 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Borhani  8 سال پیش
0 0

راه صحیح جلوگیری از sqlinjection همین است:

 

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[”]

+1 0
mbm124 عزیز ممنون از لطف شما برای معرفی این تابع، دنبال تابعی مثل همین بودم که پیدا نکردم و علی الحساب خودم چیزی که در سوال دیدید رو نوشتم تا کارم راه بیوفته. منتها یک نکته که تابع mysql_real_escape_string دپریکیت شده و استفاده از اون به صلاح نیست. (8 سال پیش)
+1 0
استاد هم روش هایی برای جلوگیری از sqlinjection داده اند میتوانید در فصل امنیت اونها را بررسی نمایید. (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .