پیاده سازی Sql Injection با استفاده از Query String و روش جلوگیری از آن

چهارشنبه 13 مرداد 1395

دراین مقاله شما نفوذ در پایگاه داده و روش جلوگیری از آن را خواهید آموخت .Query String زمانی برای ما کارآمد است و مورد استفاده قرار می گیرد که ما قصد انتقال اطلاعات از صفحه ای به صفحه ای دیگر را داشته باشیم .

پیاده سازی Sql Injection با استفاده از Query String و روش جلوگیری از آن

Query String زمانی برای ما کارآمد است و مورد استفاده قرار می گیرد که ما قصد انتقال اطلاعات از صفحه ای به صفحه ای دیگر را داشته باشیم .

برای مثال : http://example.com/over/there?id=4 

در اینجا ، ما در حال ارسال id = 4  هستیم . که در صفحه اطلاعات مربوط به id =4 نمایش داده خواهد شد.

دلیل استفاده از sql Injection ؟

اطلاعات درون query String برای همه قابل مشاهده است ، که همین امر باعث آسیب پذیری آن میشود . به همین دلیل query string برای انتقال اطلاعات حساس به هیچ وجه مناسب نمی باشد .

SQL Injection 
یک تکنیک است که شخص حمله کننده از طریق input های صفحه میتواند به اطلاعات پایگاه داده دسترسی داشته باشد .

SQL Injection در Query String 
در حالت کلی ، ما نام کاربری و رمز و شماره عابر بانک و اطلاعات حساس را از طریق Query String ارسال نمی کنیم . اگر شما این کار را انجام دهید ، خواهید دید که هکر ها چگونه اطلاعات حساس کاربران شما را به سرقت خواهند برد .

هکرها براحتی توانایی SQL Injection در Query String ها دارند .

برای مثال : http://testwebsite.com/testdetails.aspx?emailId=testmail@gmail.com

String strEmail = Request.QueryString("emailId")  
String SqlQuery = "SELECT * FROM temp_table WHERE emailID = '" + strEmail + "'"  

SQL query در پایگاه داده اجرا خواهد شد ، کد بالا دقیقا شبیه یک query معمولی ای است که در زیر نمایش داده شده است .

SELECT * FROM temp_table WHERE emailID = testmail@gmail.com  


از query ای که در بالا داده شده است ، توقع داریم که ،  اطلاعات شخصی را که ایمیل آن در بالا داده شده است را به ما برگرداند . مقادیر داده هایی که در query string موجود هستند رمزگذاری نشده اند ، که این یه مزیت برای Hacker است و براحتی میتواند با اعمال تغییرات بر روی query String به اطلاعات دیگر موجود در پایگاه داده ما دسترسی پیدا کتد .
 
برای مثال :
Hacker میتواند تغییراتی همانند زیر را بر روی URL با SQL Injection ،  اعمال کند :

http://testwebsite.com/testdetails.aspx?emailId=testmail@gmail.com';DROP DATABASE userdb--

توجه داشته باشید که Hacker چگونه ';DROP DATABASE userdb-- vh  را  به "کوئری بد" در مقادیر query strng ضمیمه کرد ، , و برای پایان دادن به جمله sql فعلی از کاراکتر ";"  و در ادامه کوئری دلخواه خودش را به query String اضافه میکند . بعد از ثبت درخواست ، ابتدا ، درخواست ارسالی برای جدول User اجرا خواهد شد ، سپس کل پایگاه داده Userdb را حذف میکند  . در اینجا اگر دقت کنید ، Hacker در انتهای SQL Injectione که در query string قرار داده است در انتهای آن -- را ضمیمه کرده است ، که بدین معناست که بعد از این کاراکترها ، بقیه اظهارات و درخواست های Query را نادیده بگیرد .

Hacker همچنین میتواند عمل های ADD ، UPDATE , INSERT , ALTER را بروی پایگاه داده انجام دهد و اطلاعات کاربران را بدست آورد.
در زیر ، کدی در راستای چگونگی جلوگیری کردن از نفوذ و دست کاری پایگاه داده ، آمده است :



 مواردی که باید از sql injection در query string مورد بررسی قرار بگیرند :

آدرس حقیقی :  http://localhost:2001/querystringinjection.aspx?userName=testUser

تست مورد اول :
اگر کاربر یک پارامتر query string  مانند userName = testUser ارسال کرد ، آن کاربر هیچ رکوردی را نخواهد دید ، به این دلیل که ، هیچ داده ای شبیه متنی که در input وارد شده است در پایگاه داده ما وجود ندارد . اگر ما userName = testUser یا 1=1 را ارسال کنیم تمام رکوردهای پایگاه داده را خواهیم دید ، به این دلیل که ، ما 1=1 را ارسال کردیم و این بدان معناست که ، همیشه مقدار True را بازمیگرداند .

تست مورد دوم :
اگر ما  در input متن 
userName = testUser'; update PO_USER_DETAILS_MASTER set user email='testUser@gmail.com-- 
را وارد کردیم مقدار فیلد ایمیل تمام کاربران به Email='testUser@gmail.com--  تغییر خواهد کرد .

تست مورد سوم :
اگر ما  user Name = sampleUser' drop table sampleTable-- ارسال کنیم ، اطلاعات کاربران را نمیتوانیم ببینیم . در پایگاه داده ، Hacker جدول ما را drop کرده است .

تست مورد چهارم :
اگر ما user Name = sampleUser' or ‘1’=’1’ drop table sampleTable -- را ارسال کنیم ما میتوانیم اطلاعات کاربران را مشاهده کنیم . در پایگاه داده  ، جدول ما drop شده است .


تست مورد پنجم :
اگر ما userName = <script src="http://localhost:2001/Attackerscript.js"></script> را ارسال کنیم ما میتوانیم "اسکریپت های بد " را به query string ضمیمه کنیم .

آموزش نصب sql server 2017

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید