iran rules jazbe modir
snapphost mahak

Rednofozi

Hacking SQL Injection راهی برای حمله و نفوذ به سایت های اینترنتی

پست های پیشنهاد شده

یکی از راه های حمله و نفوذ به سایت های اینترنتی و دستکاری داده های بانک اطلاعاتی،تزریق کد های مخرب SQL به سایت است.

در این روش مهاجم سعی می کند با وارد کردن دستورات sql در سایت به

پایگاه داده دسترسی پیدا کرده و اقدام به ویرایش ،حذف و بازیابی داده های

مورد نظر خود از بانک اطلاعاتی کند.

در این مقاله به چگونگی مقابله با این حمله به صورت اجمالی می پردازیم.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

telegram channel   jazbe modir

صفحه Login یک سایت را در نظر بگیرید.معمولا برنامه نویسان از عبارات پویا ی SQL برای بررس

ی صحت وجود کاربر مجاز جهت ورود به سایت استفاده می کنند.
query متداول select برای ورود به سایت :

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


این query بر اساس مقادیری که از دو textbox username, password می گیرد،وجود کاربر را بررسی می کند.
حال اگر کاربر به جای IDو Password (یا حتی فقط ID ) عبارت sara’ or 1=1- - را وارد کند به راحتی از صفحه Login سایت عبور خواهد کرد.(کلمه sara در اینجا username است.)

 

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


از آنجایی که "1=1" همواره برقرار است،بخش شرط دستور خنثی میشود و معادل این query خواهد شد: Select * from Users

وچون در SQL برای بیان توضیحات از"--" استفاده می شود ، با استفاده از این عبارت در اینجا ،قسمت بعدی عبارت SQL نادیده گرفته می شود .
تا اینجای کار ،نفوذ تنها منجر به بازیابی اطلاعات شد.حال به مثال زیر توجه کنید:

 

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

این query شامل دو دستور است که با ";" از هم جدا شده اند. دستور دوم باعث حذف جدول users خواهد شد!

تزریق کد sql در query string:

Query string روش متداولی برای نمایش پویای اطلاعات در سایت ها می باشد.به این لینک توجه کنید:

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

با استفاده از این عبارت،محتوای مقاله ای نمایش داده می شود که artID آن برابر 20 است. حال اگر مهاجم عبارت زیر را وارد کند:
 

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


عبارت پویای sql به شکل زیر عمل میکند:
 

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

و نتیجه نمایش همه مقالات جدول Article خواهد بود.


راه های مقابله با Sql Injection :

حال به بررسی روش های مقابله با حمله های Sql Injectionمی پردازیم.
• تعیین نوع داده ای مناسب برای فیلدهای جداول دیتابیس.

به طور مثال اگر محتوای فیلدی تنها عدد می باشد،نوع آن فیلد را int در نظر بگیریم نه string.زیرا در این صورت مهاجم نمیتواند هر ترکیبی از کد های مخرب را برای نفوذ وارد کند.

اعتبار سنجی و بررسی مقادیر ورودی

در این روش سعی می شود تا از ورود کاراکترهای غیر مجاز مانند "-- ; ‘ =" از سوی کاربر جلوگیری نمود.

استفاده از پارامترها و پروسیجرهای ذخیره شده

با استفاده از پروسیجرهای ذخیره شده کاربران نمیتوانند مستقیما به جداول دسترسی داشته باشند و تزریق کدهای sql به سادگی قبل نیست زیرا در این روش پارامترها از نظر نوع ارسال شده و طول مجاز بررسی و می شوند.

مثال استفاده از روش پارامتر:

 

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


• استفاده از روش String.Format

در این روش نیز مانند روش پارامتر ورودی از نظر نوع ارسال داده و طول مجاز بررسی می شود.
مثال استفاده از روش String.Format :

 

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


• دادن سطح دسترسی محدود به کاربران،در اجرای دستورات sql


• تعداد کاراکترهای ورودی کاربر را محدود کنید.

با تعیین حداکثر تعداد کاراکترهای دریافتی می توان میزان سعی و خطا و نفوذ محاجمین را کاهش داد.

• پرهیز از نمایش دادن خطاهای برنامه به کاربر

خطاهای حاصل از دیتا بیس حاوی مشخصاتی از دیتابیس مانند نام جداول ،فیلدها یا نام دیتابیس و... هستند و مهاجمین گاهی با تست کردن ورودی ها،از این خطاها برای نفوذ در بانک اطلاعات استفاده می کنند.
بنابراین بهتر است تا صفحه ای برای نمایش خطا ساخته و در زمان بروز این خطا ها آن صفحه را نمایش دهید.
برای این کار،پس از ساخت صفحه خطا،در فایل web.config مقدار تگ CustomError را با "on" تنظیم کنید تا جزئیات خطاهای پیش بینی نشده نمایش داده نشود. 
تگ های زیر را قبل از تگ </configuration> وارد کنید.

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

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری