جلوگیری از حملات SQL Injection در ASP.NET - تالار گفتمان آذر فروم





دعوت به همکاری با آذر فروم

 

جلوگیری از حملات SQL Injection در ASP.NET
زمان کنونی: 14-09-1395،01:11 ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: Friga
آخرین ارسال: Friga
پاسخ: 4
بازدید: 269

 
 
رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5

موضوع: جلوگیری از حملات SQL Injection در ASP.NET
ارسال: #1
1 جلوگیری از حملات SQL Injection در ASP.NET
پست‌ها: 11,943
تاریخ عضویت: 20 اردیبهشت 1390
اعتبار: 288
حالت من: Shad
در این مقاله فرض شده است که خواننده با اصول اولیه زبان پرس و جوی ساخت یافته (Structured Query Language) یا همان SQL آشنا است. در ضمن کدهای موجود در این مقاله تماما به زبان VB.NET می باشند
















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


=====ஜ۩۞۩ஜ=====

15-05-1391 07:03 ب.ظ
 
ارسال: #2
RE: جلوگیری از حملات SQL Injection در ASP.NET
پست‌ها: 11,943
تاریخ عضویت: 20 اردیبهشت 1390
اعتبار: 288
حالت من: Shad
یک حمله SQL Injection چیست؟

حتما در فیلمهای سینمایی دیده اید که بسیاری از تبهکاران قربانیان خود را با تزریق مواد سمی به جای دارو از میان بر می دارند. آیا در دنیای سایبر نیز چنین ایده هایی وجود دارد؟ در کمال تعجب باید بگویم که بله!! هکرها هم به نوعی از این شگرد استفاده می کنند. می گویید چگونه؟ با تزریق کردن دستورات SQL مورد علاقه خود به Application شما! اجازه دهید تا با یک مثال مطلب را روشن تر کنم:
















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


=====ஜ۩۞۩ஜ=====

15-05-1391 07:03 ب.ظ
 
ارسال: #3
RE: جلوگیری از حملات SQL Injection در ASP.NET
پست‌ها: 11,943
تاریخ عضویت: 20 اردیبهشت 1390
اعتبار: 288
حالت من: Shad
سیستم Login:

صفحات Login معمولا دارای فیلدهایی هستند که دو مقدار ID و Password را از کاربر گرفته و سپس با استفاده از یک دستور SQL آن را پردازش می کنند. نمونه ساده ای از این دستور به صورت زیر است:
SELECT COUNT(UserID) FROM tblUsers WHERE UserID=’” & UserID.Text & “‘ AND Pass=’” & Password.Text & “‘”

در این مثال UserID و Password دو کنترل TextBox هستند که مقادیر آنها بایستی مورد پردازش قرار گیرد. حال فرض می کنیم کاربر مقادیر را به صورت mahdi و ۱۲۳ وارد نماید، در این صورت جمله SQL به صورت زیر تولید می شود:
SELECT COUNT(UserID) FROM tblUsers WHERE UserID=’mahdi’ AND Pass=’123′

خوب تا اینحا مشکلی وجود ندارد. حال فرض کنید که هکر ما به جای کلمه کاربری خود عبارت زیر را وارد نماید:
‘ OR 1=1 –

در این صورت عبارت SQL زیر تولید خواهد شد:
SELECT COUNT(UserID) FROM tblUsers WHERE UserID=” OR 1=1 – AND PASS=”

احتمالا می دانید که کاراکتر – در SQL علامت توضیحات است و عبارت پس از آن دیگر پردازش نمی شود لذا هنگام پردازش دستور چون همواره ۱=۱ است و با توجه به OR به کار رفته، بدون توجه به خالی بودن مقدار مقابل UserID 1=1 کافی تلقی شده و کلیه رکوردهای بانک اطلاعاتی برگردانده می شود و Attacker اصطلاحا Authenticate می شود.

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
















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


=====ஜ۩۞۩ஜ=====

15-05-1391 07:03 ب.ظ
 
ارسال: #4
RE: جلوگیری از حملات SQL Injection در ASP.NET
پست‌ها: 11,943
تاریخ عضویت: 20 اردیبهشت 1390
اعتبار: 288
حالت من: Shad
چاره کار !

ساختار شی گرای ASP.NET و امکانات این ساختار به برنامه نویسان امکان مانور بیشتری را داده است. حال ما کد کامل اصلاح شده را در زیر آورده و سپس توضیحات آن را ذکر می کنیم:

Dim strSQL As String = "SELECT COUNT(UserID) FROM tblUsers WHERE
UserID=@UserID AND Password=@Password"
Dim cmndCheck As OleDbCommand = New OleDbCommand(strSQL, _Connection)

cmndCheck.Parameters.Add("@UserID", UserID.Text);
cmndCheck.Parameters.Add("@Password", Password.Text);
cmndCheck.Connection.Open()
Dim IsValid As Integer = cmndCheck.ExecuteScalar()

If IsValid > 0
'... Some Code here... User is authenticated
Else
'... Some Code here... User is not aututorized to view the page
End If

تغییر در همان خط اول یعنی دستور SQL مشخص است این بار به جای اینکه مقادیر دریافتی از فیلدها با Single Quote به خورد پردازشگر دستور داده شود مقادیر با پارامترهای تولید شده توسط آبجکت OleDbCommand جایگزین می شود و در آخر cmndCheck پردازش شده چنانچه مقدار تولید شده توسط ExecuteScalar بزرگتر از صفر باشد بدین معنی است که حداقل یک رکورد با شرایط مورد نظر ما پیدا شده است. (متغیر Connection_ که باید برابر ConnectionString شما قرار گیرد دانسته فرض شده است)

تقاوت اصلی این روش نسبت به روش ناامن قبلی این است که در اینجا مقادیر به صورت کاملا” پارامتری شده پردازش می شوند نه به صورت قطعاتی از یک رشته حرفی که در واقع دام اصلی SQL Injection به شمار می آید. در واقع ما در اینجا از تکنیکهای رشته سازی با استفاده از & یا + اجتناب کرده ایم.

نکته مهم دیگری که باید حتما مورد توجه قرار دهید این است که یکی از راههایی که هکرها برای حمله به سایت شما استفاده می کنند خطاسازی صوری در زمان اجرای Application و مطالعه اطلاعات خطای دریافت شده است. برای جلوگیری از این اتفاق که می تواند ساختار بعضی از قسمتهای کد شما را برای حمله کنندگان آشکار کند حتما در Application خود از روال خطایابی Customize شده استفاده کنید. علاوه بر این می توانید در بسیاری از قسمتها به صورت موردی از Try…End Try استفاده کنید و برای اطلاع خودتان از خطای رخ داده e As OleDbException را به آدرس Email خود ارسال کنید که در این مورد در فرصتی دیگر صحبت خواهم کرد.

این مثال و راه حل یکی از ساده ترین انواع حملات Injection روی Web Applicationهاست و شما می توانید نمونه ها و مثالهای متعددی در این خصوص را در سایتهای

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

و

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

پیدا کنید که چنانچه گفته شد (و در قسمت دوم این مقاله بدان پرداخته خواهد شد) بیشتر مربوط به SQL Server است. روش کلی کار در SQL Server نیز کمابیش مشابه همین روش است با این تفاوت که در آنجا از Stored Procedure استفاده می شود. پس منتظر قسمت دوم این مقاله و تکنیکهای پیشرفته تر Hackerها در نفوذ به بانک اطلاعاتی SQL Server یک برنامه نویس ناشی و روش اجتناب از آن باشید icon wink جلوگیری از حملات SQL Injection در ASP.NET

توضیح: برخی قسمتهای این مقاله از مقاله “از بانک اطلاعاتی خود دفاع کنید” نوشته Beth Breidenbach چاپ شده در شماره ۹ (نوامبر/دسامبر ۲۰۰۲) مجله asp.netPRO اقتباس شده است.
















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


=====ஜ۩۞۩ஜ=====

15-05-1391 07:04 ب.ظ
 


[-]
پاسخ سریع
پیام
پاسخ خود را برای این پیام در اینجا بنویسید.


کد تصویری
royalfuns
(غیر حساس به بزرگی و کوچکی حروف)
لطفاً کد نشان داده شده در تصویر را وارد نمایید. این اقدام جهت جلوگیری از ارسال‌های خودکار ضروری می‌باشد.

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان