PDA

View Full Version : سوال: شرح یک تابع



lady64
شنبه 06 اسفند 1390, 14:14 عصر
من این تابع رو از همین تالار گرفتم ، سوالم اینه که فقط برای مقادیری که از کاربر گرفته میشه باید این تابع رو استفاده کرد ؟ یا در مواردی هم که یک مقدار( بعنوان مثال یک مقدار خروجی از بانک )بدست میاد و میخوایم با get به صفحه ی بعد انتقال بدیم هم از این استفاده میشه؟
این که گفته میشه داده ها بصورت خام وارد database نشه ، منظور استفاده از همین تابع هست؟
و از طرفی اگر 10 مقدار در یک صفحه از کاربر گرفته شد ، 10 بار این تابع رو فراخوانی کنم ؟
یک توضیح کوچیک از این تابع لطفا ....


1. function AntiInject( $Source ){
$Source = htmlspecialchars(trim($Source ));
if(! get_magic_quotes_gpc() ) {
$Source = addslashes( $Source );
}
return mysql_real_escape_string(stripslashes($Source));
}

MMSHFE
شنبه 06 اسفند 1390, 15:21 عصر
این تابع، یک رشته رو دریافت میکنه و ابتدا فواصل اضافی اطرافش رو با trim حذف کرده و بعد، تگهای html اون رو با htmlspecialchars غیرفعال میکنه. در ادامه، چک میکنه اگه magic_quotes_gpc غیرفعال باشه، با تابع addslashes کارکترهای \ رو هرجا لازم باشه برای Escapeکردن انجام میده. درنهایت، بعد از اینکه متن با حذف \ها Unquoteشد، با استفاده از تابع mysql_real_escape_string متن رو به یک رشته بیخطر برای MySQL تبدیل میکنه. امیدوارم چیزی از توضیحاتی که گفتم متوجه شده باشین چون خودم هم نمیتونم دوباره تکرارش کنم. فهمیدنش بماند!
ضمناً برای هرکدوم از ورودی های کاربر باید این تابع رو صدا بزنید. یک نکته مهم هم اینکه قبل از صدازدن این تابع، اتصال به MySQL رو برقرار کنید وگرنه تابع mysql_real_escape_string پیغام خطا تولید خواهد کرد.
موفق باشید.

farhadfery
شنبه 06 اسفند 1390, 15:39 عصر
استاد این تابع برای جلوگیری از sql injection هست. فکر می کنید استفاده از htmlspecialchars نیاز هست؟ چرا؟

MMSHFE
شنبه 06 اسفند 1390, 15:47 عصر
اولاً که من استاد نیستم (کوچیک همه شماهام)، ثانیاً برخی از جاها بهش نیاز میشه. مثلاً اگه بخوایم خروجی رو توی صفحه نمایش بدیم. مثلاً اطلاعاتی که کاربر توی یک ادیتور مثل TinyMCE نوشته که طبیعتاً ساختار HTML داره. برای جلوگیری از اجرای اون و فقط ذخیره این اطلاعات، نیاز به این کار داریم. هرچند دلیل اصلی استفاده از htmlspecialchars خنثی کردن استفاده نفوذگرها از تگهایی مثل script و... در اطلاعات واردشده هست تا نتونن کدهای JS خودشون رو Inject کنن.

farhadfery
شنبه 06 اسفند 1390, 15:55 عصر
شما لطف دارید.
اینرا می دونم که موقع نمایش, ازش استفاده می شه. سوال من اینکه موقع درج در پایگاه داده نیاز است ؛ استفاده کنیم؟ در دو حالتی که در متنی که قرار است درج شود تگهای HTML است و یا تگ HTML نیست

MMSHFE
یک شنبه 07 اسفند 1390, 13:56 عصر
در درج اطلاعات در پایگاه داده خیلی ضروری نیست ولی باید حتماً موقع نمایش اینکار رو انجام بدین تا از اجرای اسکریپتهای احتمالی Injectشده خودداری بشه. البته میتونید هرموقع خواستین با htmlspecialchars_decode عمل تابع htmlspecialchars رو خنثی کنید.