ورود

View Full Version : سوال: درخواست گذاشتن یه مثال برای فرمی که میشه روی اون عمل sql injection رو انجام داد



sahel65
یک شنبه 01 آبان 1390, 18:53 عصر
سلام دوستان
با توجه به اینکه دوستان زیادی در این زمینه سوال دارند امکان اینکه یه فرمی طراحی کرده و بعدش روی اون دستوراتی که باعث خطر میشه رو به عنوان نمونه گذاشت وجود نداره؟
بعنوان مثال در این صفحه (http://msdn.microsoft.com/en-us/library/ms161953(v=SQL.90).aspx) خود مایکروسافت یه نمونه گذاشته ولی میخوام ببینم از دوستان کسی هست که یه نمونه یا مثالی در این زمینه داشته باشه؟

Mostafa_Dindar
یک شنبه 01 آبان 1390, 21:40 عصر
سلام ،

هرگاه دستور شما نتیجه الحاق پارامترهای ورودی کاربر از هر ورودی بشه مستعد حملات SQL Injection هست . فرض کنید شما دستوری به شکل زیر دارید :

string strQry = "SELECT Count(*) FROM Users WHERE UserName='" +
txtUser.Text + "' AND Password='" + txtPassword.Text + "'";
و منطق برنامه تون طوری باشه که در صورتی مقدار خروجی کوئری بزرگتر از 0 باشه پس کاربری هست و اجازه لاگین شدن داده بشه .
در اینصورت اگر کاربر مقادیر درست وارد کنید کوئری به شکل زیر خواهد شد :
SELECT count(*) FROM Users WHERE UserName='Paul' AND Password='password'

و
ولی اگر کسی به جای نام مقدار زیر را وارد کند :

' Or 1=1 --

نتیجه کوئری به شکل زیر خواهد شد :

SELECT Count(*) FROM Users WHERE UserName='' Or 1=1 --' AND Password=''

و همانطور که میدونید -- در SQL دستورات بعد از خودش را کامنت و بی اثر میکنه یعنی دستوری که اجرا میشه برابر خواهد بود با :

SELECT Count(*) FROM Users WHERE UserName='' Or 1=1

و همیشه شرط بعد از Where صحیح هست و مقدار کوئری بزرگتر از 0

moferferi
دوشنبه 02 آبان 1390, 00:12 صبح
سلام.
توی یه مجموعه اموزشی دات نت میگفت اگه از ado.net entity model استفاده بشه دیگه sql injection غیر ممکنه
ایا واقعا همینطوره؟
اگه پروسیجرهای اس کیوال را با entity model مقدار دهی کنیم هک از طریق اینجکشن غیر ممکن میشه؟

Mostafa_Dindar
دوشنبه 02 آبان 1390, 08:11 صبح
سلام

غیر ممکن لغت خیلی سنگینی هست . ولی براحتی میتوان گفت درصورتی که از LINQ TO SQL یا ADO.NET Entity Framework استفاده کنیم تا نزدیک به 100% از این حملات مصون خواهیم بود .