كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> طراحي سايت‌هاي اينترنتي -> اصول طراحي صفحات وب
پاسخ دادن به این موضوع
یکی از راههای جلوگیری از SQLInjection
پست تاریخ: سه‌شنبه 9 آذر 1389 - 12:55    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: یکی از راههای جلوگیری از SQLInjection خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام به همه دوستان
خوشبختانه مسائلی که این چند روز گذشته برای سایت پیش اومده بود به خوبی بر طرف شد و دوباره سایت بالا اومد و د دسترس همگی قرار گرفت Embarassed .

این چند وقته دنبال راه های جلوگیری از هک شدن توسط SQLInjection میگشتم تا اینکه به یک راهی رسیدم که به نظرم ساده تر و کار آمدتر از بیقه راه‌ها هست و راز در رویی براش نیستش .
برای جلوگیری از SQLInjection کافی هستش که موقعی که می‌خواهیم $query خودمون رو تعریف کنیم به شکل زیر عمل کنیم :
کد:

$query = sprintf("select username from users where
id='%d'",$_post['User_ID']);


در واقع ما با این کار میگیم مقداری که باید برای id جایگزین شود باید یک عدد از نوع Integer باشد و اگر غیر از این بود مقدار 0 برای آن وارد می‌شود و موقع اجرای query هم چون کاربری با همچین id وجود نداره مقداری برگشت داده نمی‌شود و کدی هم به دیتابیس ما وارد نشده است.

خوشحال میشم نظر شما دوستان رو هم بدونم و اگر به نظرتون این راه نقصی داره و یا کامل نیستش بیان کنید .

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: شنبه 13 آذر 1389 - 09:49    
amirhosein
عضو تیم توسعه تستا
عضو تیم توسعه تستا


پست: 183
عضو شده در: 22 فروردین 1387
محل سکونت: کاشان
iran.gif


امتياز: 1661

عنوان: پاسخ به «یکی از راههای جلوگیری از SQLInjection» خواندن مشخصات فردی ارسال پیام شخصی

اگه مشکل فقط اینه که بهتره متغیر id رو تبدیل کنید به یه عدد. اینجوری:
کد:
$id=intval($id)

بعدش این متغیر اصلاح شده رو بفرستید به کوئری مدنظر. البته بنظرم این راه به تنهایی کافی نیست و بهتره که متغیرهای ارسالی رو از فیل.ت.ر های! بیشتری بگذرونید

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: شنبه 13 آذر 1389 - 19:13    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: پاسخ به «یکی از راههای جلوگیری از SQLInjection» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام amirhosein, جان
بله این راهی که شما هم می‌گید و به جز این راه راه‌های دیگه ای مثل
کد:

$id = (int) $id
if(is_int($id))
{}

و غیره هم وجود داره اما فکرش رو بکنید شما چندین و چند متغییر رو از کاربر دریافت می‌کنید اگر بخواید قبل از همه‌ی اونا این کار رو انجام بدید زمان بر هستش و ممکن بعضی هاشون رو هم از قلم بیاندازید اما با این روش دیگه شما با متغییر ها در هر‌جایی که هستن کاری ندارید فقط موقع کوئری نوشتن کافی هستش از راهی که در بالا گفتم استفاده کنید.
در مورد این که این راه کافی و مطمئن هست یا نه هم باید بگم که اگر متغییری که دریافت می‌کنید فقط عدد باشه مطمئن باشید یکی از بهترین راه‌ها و مطمئن ترین‌هاش هستش و دیگه نیازی به هیچ فیلتری ندارید ولی اگر عدد نباشه همون طوری که گفتی باید از فیلتر رد بکنیدشون.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: Gytyonline (جمعه 21 مرداد 1390 - 10:00)


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc