PDA

View Full Version : سوال: مشکل در مورد Regex در مورد محافظت از حملات Sql Injection



explod_javad
چهارشنبه 07 مرداد 1388, 23:32 عصر
با سلام
من میخام به وسیله Regex ، قبل از ذخیره ورودی در دیتابیس چک کنم که آیا ، رشته مورد نظر بدون مشکل هست یا نه ؟
یعنی دارای کارکتر های غیر مجاز و یا مثلا غیر حروف می باشد یا نه ؟
و غیره ..
کسی pdf و یا منبع مناسبی سراغ نداره؟
یه مشکل دیگه اینکه :


Dim X As New Regex("[a-zA-Z]")
Response.Write(X.IsMatch("76sdssdsdsd"))

خروجی کد بالا True هست در حالی که باید False باشه ! چرا ؟
من میخام اگه همه کارکتر ها حرفی بود آنگاه خروجی True باشه!

samirdev
پنج شنبه 08 مرداد 1388, 01:14 صبح
اگه با Sql Injection مشکل دارید نیازی به استفاده از Regex نیست. چون وقتی از SqlParameter استفاده می کنید خود به خود جلوی Sql Injection گرفته می شود. و اگر مشکل چیز دیگری است که شرمنده.


SqlConnection cn = new SqlConnection("ConnectionString");
SqlCommand cm = new SqlCommand("INSERT INTO TABLE1(FIELD1,FIELD2) VALUES(@FIELD1,@FIELD2)");
cm.Connection = cn;
cm.Parameters.AddWithValue("@FIELD1",value1);
cm.Parameters.AddWithValue("@FIELD2",value2);

cm.ExecuteNonQuery();

milade
پنج شنبه 08 مرداد 1388, 07:44 صبح
سلام
در مورد سوال یک که توضیح داده شد .
در مورد سوال دو پترنتون رو به این شکل اصلاح کنید :

^[a-zA-Z]+$

موفق باشید

explod_javad
پنج شنبه 08 مرداد 1388, 09:44 صبح
یک سوال :
آیا بازدید کننده می تواند در موقع ثبت نام ، ازارسال نظرات و یا هر جای دیگر از سایت که امکان ارسال اطلاعات به دیتابیس را دارد، کدی وارد کند که باعث ایجاد مشکل در سایت شود (هک کند) .
یه چیزی شبیه Sql Injection ؟
من میخام جلوی این حملات را بگیرم

milade
پنج شنبه 08 مرداد 1388, 10:18 صبح
سلام
بله .
نمونه :

insert into tbl_x(y) values(+txtbox.text+')
حذف Table :

insert into tbl_x(y) values('x');drop table tbl_x
راهکارش هم که توی پست 2 بود .
اگه اونو نمیخوای باید فیلتر کنی ..

explod_javad
پنج شنبه 08 مرداد 1388, 12:39 عصر
من دارم از SP استفاده می کنم آیا مشکل حملات Sql Injection و امثال اون برطرف میشه ؟

milade
پنج شنبه 08 مرداد 1388, 13:19 عصر
SP قدرتمند تر از T-SQL هست .
مشکلی هم معمولاً نداره .. ( حتماً پارامتری هست .. )

explod_javad
پنج شنبه 08 مرداد 1388, 14:04 عصر
دوست من متشکر از کمکت .
بصورت حقیقی از پارامتر استفاده نمی کنم ولی :
من در لایه DAL از DataSet.xsd استفاده میکنم.
و از طریق Dataset با Sp در ارتباط هستم.
حالا چطور ؟

milade
پنج شنبه 08 مرداد 1388, 15:34 عصر
بستگی داره چه طور اطلاعات رو به DataSet پاس میدی

explod_javad
پنج شنبه 08 مرداد 1388, 19:06 عصر
این کد ها در لایه BLL وجود دارند


Private _tbl_1 As Tbl_PostTAdapter = Nothing
Protected ReadOnly Property Adpter_test() As Tbl_1TAdapter
Get
If _tbl_1 Is Nothing Then
_tbl_1 = New Tbl_1TAdapter()
End If
Return _tbl_1
End Get
End Property

<System.ComponentModel.DataObjectMethodAttribute(Sy stem.ComponentModel.DataObjectMethodType.Insert, False)> _
Public Function AddTest(ByVal CID As Long, ByVal Mem As String, ByVal title As String, _
ByVal Des As String, ByVal Text As String, _
ByVal ImgUrl As String, ByVal DateAdd As String, ByVal Active As Boolean) As Integer
Return Adpter_test.AddPost(CID, Mem, title, Des, Text, ImgUrl, DateAdd, Active))
End Function