PDA

View Full Version : سوال در مورد sql injection



mohsen.nsb44
چهارشنبه 09 تیر 1389, 13:53 عصر
سلام دوستان فرمودن كه اگه ثبت اطلاعات به وسيله پارامتر ها صورت نگيره ميتونه توسط دستورات اسكيو ال مورد حمله قرار بگيره يك مقاله هم كه اقاي راد نوشته بودند رو خوندم حال اين سوال واسه من پيش اومده
1ايا هر كسي مي تونه از اين دستورا براي هك يك سايت استفاده كنه ؟
2 ايا اين دستورات بيشتر براي سايت هايي است كه با php نوشته شده اند يا فرقي نمي كنه شامل asp هم ميشه؟

3 ايا راهي هست كه كسي متوجه بشه من يا شخص ديگري سايتم رو با پارامتر ها كد نويسي كردم يا دستورات مستقيم اسكيو ال

اين ها سوالاتي بود كه واسم پيش اومدند اگه راهنماييم كنيد ممنونتون خواهم شد .

Behrouz_Rad
چهارشنبه 09 تیر 1389, 14:20 عصر
1ايا هر كسي مي تونه از اين دستورا براي هك يك سايت استفاده كنه ؟

اگر اون سایت در مقابل SQL Injection آسیب پذیر باشه و فرد با نحوه ی استفاده از این آسیب پذیری آشنایی داشته باشه، بله می تونه.



2 ايا اين دستورات بيشتر براي سايت هايي است كه با php نوشته شده اند يا فرقي نمي كنه شامل asp هم ميشه؟

هم سیستم مدیریت دیتابیس MySQL و هم SQL Server به این نوع حمله آسیب پذیر هستند.



3 ايا راهي هست كه كسي متوجه بشه من يا شخص ديگري سايتم رو با پارامتر ها كد نويسي كردم يا دستورات مستقيم اسكيو ال

ابزارهایی برای بررسی آسیب پذیر بودن یک سایت نسبت به SQL Injection وجود دارند. در صورت دریافت پاسخ مثبت، می تونی متوجه بشی که سایت مورد نظر، عبارت های ورودی رو مستقیماً پردازش می کنه.

موفق باشید.

mohsen.nsb44
چهارشنبه 09 تیر 1389, 14:26 عصر
حال اين سوال پيش اومده واسم در صورتي كه سايتي مورد دستورات قرار گرفت چكار بايد كرد؟
ايا ميشه فهميد كه كسي در حال تزريق چنين كد هايي است؟
اگر وب سايت به وسيله اين دستورات هك شد چكار بايد كرد؟

Behrouz_Rad
چهارشنبه 09 تیر 1389, 16:03 عصر
حال اين سوال پيش اومده واسم در صورتي كه سايتي مورد دستورات قرار گرفت چكار بايد كرد؟
ايا ميشه فهميد كه كسي در حال تزريق چنين كد هايي است؟
اگر وب سايت به وسيله اين دستورات هك شد چكار بايد كرد؟
نوع حمله می تونه متفاوت باشه. مثلاً من چون آدم خوبی هستم وبلاگ یکی از مدیران این سایت رو به همین طریق مورد حمله قرار دادم و فقط چند تا از کامنت های پست هاش رو حذف کردم و بعدش بهش SMS دادم و گفتم سایتت رو ارتقاء بده. اما کسی که از من خوبتر باشه ممکنه کل دیتابیست رو حذف کنه... تشخیص این نوع حمله می تونه ساده یا سخت باشه. بسته به نوع عملکرد اون آدم خوب داره.
در صورتی که سایت شما مورد چنین حمله ای قرار گرفت، ابتدا یک لیوان آب قند در کنارت قرار بده. سپس فایلی با نام app_offline.htm ایجاد کن و در ریشه ی سایتت قرار بده و در اون بنویس "کارگران مشغول کارند". حجمش رو هم از 1 کیلوبایت بیشتر بگذار. چون IE باگی داره که فایل های کم حجم رو نمی تونه درک! کنه. سپس دیتابیست رو بررسی کن و ببین اون ملعون بی ادب چه حجم خسارتی به سایتت وارد کرده. و بعد هر ناسزایی دوست داشتی نثارش کن.
سپس تمامی دستورات SQL رو به Stored Procedure منتقل کن تا SQL Injection به وجود نیاد. البته اگر Dynamic Query ایجاد و از sp_executesql استفاده می کنی باید بیشتر محتاط باشی.

موفق باشید.

L u k e
چهارشنبه 09 تیر 1389, 19:10 عصر
یه سوال آقا بهروز
پیشنهاد شما اینه که همه ی دستوارت Sql ای که در پروژه استفاده می کنیم به صورت Stored Procudere در بیاریم ؟
یا فقط آونایی که مدام استفاده می شن ؟

Behrouz_Rad
چهارشنبه 09 تیر 1389, 19:30 عصر
یه سوال آقا بهروز
پیشنهاد شما اینه که همه ی دستوارت Sql ای که در پروژه استفاده می کنیم به صورت Stored Procudere در بیاریم ؟
یا فقط آونایی که مدام استفاده می شن ؟
همه رو...........

mohsen.nsb44
جمعه 11 تیر 1389, 16:56 عصر
سلام اقای راد ممنون از راهنماییتون چند سوال دیگه ازتون دارم اولا برای ثبت از پروسیجر استفاده کردم با کد زیر
SqlConnection con=new SqlConnection();
con.ConnectionString=@"data source=.\sqlexpress;initial catalog=nsbdb;integrated security=true";
SqlCommand cmd=new SqlCommand("db_nsb",con);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tarikh",this.TextBox9.Text);
cmd.Parameters.AddWithValue("@onvan",this.TextBox10.Text);
cmd.Parameters.AddWithValue("@sharh",this.FCKeditor5.Value);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
و کد مربوط داخل استور پرسیجر به صورت زیر

ALTER PROCEDURE dbo.db_nsb
(
@tarikh nvarchar(50),
@onvan nvarchar(100),
@sharh ntext
)
AS
begin transaction
insert into khabar
(tarikh,onvan,sharh)
values
(@tarikh,@onvan,@sharh)
IF @@ERROR<>0
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
RETURN
این کد ها که از نظر امنیتی مشکل ندارند؟
برای نمایش و جستجو هم باید از پارامتر ها و استور پروسیجر ها باید استفاده کرد؟ اگه بله چطور؟ یک مثال کوچیک می نویسید؟
ممنون از راهنمایی های موثر تون.

Behrouz_Rad
جمعه 11 تیر 1389, 17:05 عصر
کدهاتون رو در تگ [CODE] قرار بدید تا راحت تر بشه خوندشون.
کدها صحیح هستند. نمایش و جستجو هم همانند کدهای فوق هستند با این تفاوت که به جای ExecuteNonQuery باید از ExecuteReader استفاده کنید.

موفق باشید.

mohsen.nsb44
جمعه 11 تیر 1389, 17:16 عصر
کدهاتون رو در تگ [code] قرار بدید تا راحت تر بشه خوندشون.
کدها صحیح هستند. نمایش و جستجو هم همانند کدهای فوق هستند با این تفاوت که به جای ExecuteNonQuery باید از ExecuteReader استفاده کنید.

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

Behrouz_Rad
جمعه 11 تیر 1389, 17:22 عصر
کد خاصی نیاز نداره. 'SELECT field1,field2 FROM MyTable WHERE field1 = 'ye chizi
برای بازیابی و نمایش اطلاعات روش های مختلفی وجود داره. اما از اونجا که در پیغام خصوصی گفتی پروژه رو باید فردا تحویل بدی، نمی خوام درگیر جزئیات بشی. داده ها رو در SqlDataReader بریز و به GridView اون رو Bind کن.

موفق باشید.

mohsen.nsb44
جمعه 11 تیر 1389, 17:30 عصر
تشکر می کنم از راهنماییتون اما در مورد کد SELECT field1,field2 FROM MyTable WHERE field1 = 'ye chizi خدمتتون عرض کنم که من 4 تا رادیو باتن دارم که کاربر با کلیک بر روی هر کدوم فیلد خاصیو جستجو می کنه با این کد فقط یک فیلد قابل جستجو هست به عنوان مثال گزینه ها رو واستون عرض می کنم جستجو بر اساس مهارت جستجو بر اساس شماره ملی جستجو بر اساس رشته و مقطع تحصیلی خوب دراین حالت چکار باید کرد که اگه رادیو باتن اول کلیک شد بر اساس مهارت رادیو باتن دوم کلیک شد بر اساس شماره ملی و ... جستجو کند کدی که قبلا استفاده می کردم به صورت زیر بود


if (family.Checked)
SqlDataSource3.SelectCommand = " select * from karjoyan where meli_id=N'" + TextBox6.Text + "' ";

else if (maghta.Checked)
SqlDataSource3.SelectCommand = "select * from karjoyan where maghta_tahsily=N'" + TextBox6.Text + "' ";
else if (rd_reshte.Checked)
SqlDataSource3.SelectCommand = "select * from karjoyan where reshte=N'" + TextBox6.Text + "' ";
else if (maharat.Checked)
SqlDataSource3.SelectCommand = "select * from karjoyan where maharat=N'" + TextBox6.Text + "' ";
حال چطور این کار را باید انجام بدم که در استور پروسیجر بنویسم و کد صفحه اگه باز هم راهنماییم کنید ممنون می شم شرمنده که خیلی مزاحم شدم

Behrouz_Rad
جمعه 11 تیر 1389, 17:35 عصر
شما در تاپیک دیگری دارید همین سوال رو مطرح و پگیری می کنید/
تاپیک به 2 دلیل قفل میشه:
1) مطرح کردن در 2 تاپیک
2) انحراف از بحث اصلی.

موفق باشید.