PDA

View Full Version : مبتدی: سوال در مورد دستور دیتابیس به صورت خطی و پارامتر



rayson
چهارشنبه 19 آذر 1393, 22:15 عصر
سلام.
خسته نباشید.
من یک سایت نوشتم با زبان C#‎‎‎ و دیتا بیس SQL 2008 و آپلودش هم کردم سایت یک مشکل امنیتی داره و میخوام ببینم چطوری اینکار انجام میدهند و راهکاری هم برایش هست .
من کوئری که نوشتم به صورت خطی هست و از روش ارسال پارامتر استفاده نکردم .
کاربر میاد دستوری مینویسه و نام کاربری و پسورد رو بهش نشون میده ، چطوری اینکار میکنه ؟
نمونه کوئری که نوشتم:
"SELECT * FROM login_1 WHERE username='" + Puser.text + "' and password='" + Ppass.text + "'";
با تشکر

Babak-Magic
چهارشنبه 19 آذر 1393, 23:10 عصر
درود
خوب خود شما هم میدونید که این روش درست نیست.چرا اصرار دارین انجامش بدین؟
الان شما در textboxe password بنویسید ' or '1'='1 خوب 1=1 هست پس شرط برقرار میشه
راهکار های پیشنهادی:
حتما استفاده از Procedure و sqlParameter
یا txtpass.Text.Replace("'","")
موفق باشید

rayson
چهارشنبه 19 آذر 1393, 23:42 عصر
مرسی دوست عزیز .
این موضوع که روش صحیح نیست یک موضوع مشخص هست .
من خودم هم تست کرده بودم این روش که برابر 1 قرار بدم ولی جواب نداده بود برای همین تاپیک زدم.
و سوالی که پیش میاد آیا روش هایی به اینصورت برای نام کاربری هم صدق میکنه یا خیر ؟ به دلیل اینکه من نام کاربری گذاشتم که شخص نمیدونه چی هست.
روش دیگری هم وجود داره برای دور زدن ؟؟

ahmad156
پنج شنبه 20 آذر 1393, 00:14 صبح
وقتی OR میاد تو شرط ها فقط درستی یه شرط کافی هست.در ضمن خطرناک تر از این SELECT ها، میشه کل دیتابیس رو نابود کرد.اینجا (http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables-xkcd-comic-work)رو ببینین