PDA

View Full Version : سوالی در خصوص SQL injection



raha_hakhamanesh
دوشنبه 29 مرداد 1386, 08:58 صبح
با سلام

آیا اگر در یک صفحه وب مثل صفحه دریافت user,pass یکی از این فیلدها رمزنگاری شود می توان به امنیت آن اطمینان پیدا کرد یا خیر؟

لطفا پاسخ های خودتان را با توضیح ارسال فرمایید.

از همه دوستان و بزرگواران پیشاپیش سپاسگزارم...

Behrouz_Rad
دوشنبه 29 مرداد 1386, 09:31 صبح
این سوال ارتباطی با SQL Injection نداره...!
کلمه ی عبور رو کد می کنند تا اگر کسی به هر شکلی موفق شد به داده های دیتابیس دسترسی پیدا کنه، فهمیدن کلمات عبور برای اون سودی نداشته باشه.
فرضا برای یک Credit Card Number

موفق باشید.

raha_hakhamanesh
دوشنبه 29 مرداد 1386, 14:47 عصر
با سلام
آقا بهروز اصلا مگه تو الان نمی خواستی بری شیراز!! از دست تو سوالم رو در تالار ASP.NET نپرسیدم که نگی تالار پر شده از ...

------------
از شوخی گذشته بنده ارادت خاصی به پاسخ های صریح شما دارم

باید ببخشید ولی منظور من از دیدگاه SQL injection بود یعنی اگر یکی از فیلدها مثلا Pass رو رمزنگاری کنیم می توانیم به لحاظ SQL injection سیستم را دارای امنیت معرفی کنیم.

------------------
ضمنا تمام پست های شما رو که در این باره بودند از جمله بحث جنجالی شما با Javad رو مطالعه کردم.
با تشکر

mhadvi_mahmaood
دوشنبه 29 مرداد 1386, 16:03 عصر
سلام.
SQL injection اینجوریه که مثلا" شما یک برنامه مینویسی دستورش اینه :

" Select Count(*) from TblUsers where name= " + txtname.text +" and pass =" + Txtpass.Text
اگر یکی بیاد تو تکست باکس یوزرنیمت بنویسه Ali-- چی اونوقت دیگه پسوردت چک نمیشه چون -- به معنای کامنت توی SQL. پس به راحتی بدون وارد کردن رمز وارد میشه به رمز کردن داده ها هم ربطی نداره.

raha_hakhamanesh
دوشنبه 29 مرداد 1386, 16:54 عصر
با سلام
ممنون از راهنمایی شما

چونکه بر روی تبدیل عبارات متمرکز شده بودم بکلی از این مطلبی که فرموده بودید دور شدم.
از پاسخ واضح شما ممنونم.
اما یک سوال دیگر اگر فرمت دستور SQL را بدون استفاده از SP و به همین صورت ساده تغییر بدیم چطور؟
دقیقا منظورم اینه که در رویداد مورد نظر ابتدا بررسی می کنیم شماره کاربری معتبر باشد و سپس با یک دستور دیگر به صحت رمز عبور می پردازیم به این ترتیب تغییرات اعمال شده نظیر -- عملا بی فایده خواهند بود.
البته شاید ابتکار جالبی نباشه ! ... ولی حداقل یه کارهایی می کنه

Behrouz_Rad
دوشنبه 29 مرداد 1386, 19:30 عصر
باید ببخشید ولی منظور من از دیدگاه SQL injection بود یعنی اگر یکی از فیلدها مثلا Pass رو رمزنگاری کنیم می توانیم به لحاظ SQL injection سیستم را دارای امنیت معرفی کنیم.
آخه سوال شما حتی در شعاع 10 کیلومتری SQL Injection هم نیست!
سوال شما چیز دیگه ایه.

اما یک سوال دیگر اگر فرمت دستور SQL را بدون استفاده از SP و به همین صورت ساده تغییر بدیم چطور؟
دقیقا منظورم اینه که در رویداد مورد نظر ابتدا بررسی می کنیم شماره کاربری معتبر باشد و سپس با یک دستور دیگر به صحت رمز عبور می پردازیم به این ترتیب تغییرات اعمال شده نظیر -- عملا بی فایده خواهند بود.
البته شاید ابتکار جالبی نباشه ! ... ولی حداقل یه کارهایی می کنه
من پیشنهاد می کنم شما کمی در مورد SQL Injection مطالعه بفرمایید.

موفق باشید.

someCoder
دوشنبه 29 مرداد 1386, 20:57 عصر
اگر کسی در مورد SQL Injection خواست مطالعه کنه، میتونه برای شروع از این فایل که من آپلود کردم شروع کنه.

mhadvi_mahmaood
دوشنبه 29 مرداد 1386, 22:58 عصر
با سلام
ممنون از راهنمایی شما

چونکه بر روی تبدیل عبارات متمرکز شده بودم بکلی از این مطلبی که فرموده بودید دور شدم.
از پاسخ واضح شما ممنونم.
اما یک سوال دیگر اگر فرمت دستور SQL را بدون استفاده از SP و به همین صورت ساده تغییر بدیم چطور؟
دقیقا منظورم اینه که در رویداد مورد نظر ابتدا بررسی می کنیم شماره کاربری معتبر باشد و سپس با یک دستور دیگر به صحت رمز عبور می پردازیم به این ترتیب تغییرات اعمال شده نظیر -- عملا بی فایده خواهند بود.
البته شاید ابتکار جالبی نباشه ! ... ولی حداقل یه کارهایی می کنه
برای فرار از دست injection یکسری راه حل هست. یکیش اینه که از Daynamic sql دوری کنی. یکی دیگه اینکه وقتی میخوای پارمتر پاس بدی به SP یا کامندت واقعا" پارامتر باشه یعنی:

dim cmd as new sqlcommand
cmd.commandtext="Select Count(*) from user where id=@ID and pass=@pass"
cmd.parameters.Addwithvalue("@ID" ,txtid.text)
cmd.parameters.Addwithvalue("@pass" ,txtpass.text)