تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف احمي موقعي من الـ sql enjection
#1
كيف احمي موقعي من الـ sql enjection

ارجو النقاش للفائدة فالمخربين يتعاونون للتخريب Smile ونحن هنا يدا بيد للمساعدة بالحماية.
بارك الله فيكم جميعا من اولكم لاخركم
الرد }}}
تم الشكر بواسطة:
#2
نحمده ونصلي على رسوله الكريم

باستخدام الـ stored procedures و parameters، تستطيع تفادي ذلك إن شاء الله....
الرد }}}
تم الشكر بواسطة:
#3
طيب اخي الكريم .. مارايك حول الكلمات الممنوعة هل يجدي نفعا ام لا.
مثلا نقوم بتعبئة ملف نصي بتلك الكلمات مثل dim,public,script الى اخره ثم نتفحص المكتوب بمربع النص هل يحتوي احدى هذه الكلمات..هل هذا يفيد ام لا؟
ايضا الاستغلال هل هو من خلال الرابط بحيث تضاف له قيمة سواء علامة تنصيص او غيرها ام من الادوات ؟
وهل هذهالثغرة لم تسد؟ هل يعقل انها موجودة حتى بـ sql server 2008 r2 ؟
كنت اظن ان الحماية منها تتطلب اجراءات وملفات ودوال كثيرة..
طيب سؤال آخر:
كيف الى معرفة كافة القيم الموجودة بالرابط اقصد QueryString جربت الكود التالي ولم يفلح
كود :
If Request.QueryString.ToString.Contains("'") Then            
Response.Write("<div align=center><h2>لقد كتبت قيمة ممنوعة بالرابط</h2></div>")
        End If


بارك الله فيكم جميعا.
الرد }}}
تم الشكر بواسطة:
#4
لقد تذكرت موضوع
[h=1]{ معلومة} .. معلومات Request[/h]هل التحقق من المعلومات هذه مثل
Request.Url.PathAndQuery
ذو فائدة؟
الرد }}}
تم الشكر بواسطة:
#5
كتبت بملف نصي
كود :
dimpublic
script
function
'
"
get
post
item
وبحدث تحميل الصفحة كتبت
كود :
Dim sf As String = ""        sf = My.Computer.FileSystem.ReadAllText(Server.MapPath("~/pat/tt.txt"))
        For Each st In Request.Url.PathAndQuery.ToString.Split("?")
            For Each t In sf
                If st.ToString.Contains(t) Then
                    Response.Write("<div align=center><h2>لقد كتبت قيمة ممنوعة بالرابط</h2></div>")
                End If
            Next
        Next
اريد ان يطبع رسالة الخطا مرة فكيف ذلك؟
الرد }}}
تم الشكر بواسطة:
#6
عدلت قليلا
كود :
Dim sf As String = ""        sf = My.Computer.FileSystem.ReadAllText(Server.MapPath("~/pat/tt.txt"))
        For Each st In Request.Url.PathAndQuery.ToString.Split("?")
            For Each t In sf
                If st(1).ToString.Contains(t) Then
                    Response.Write("<div align=center><h2>لقد كتبت قيمة ممنوعة بالرابط</h2></div>")
                End If
            Next
        Next
الرد }}}
تم الشكر بواسطة:
#7
بالنسبة لمربع النص
كود :
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click        
lbl.Visible = False
        lbl.Text = ""




        For Each st In TextBox1.Text
            For Each t In sf
                If st.ToString.Contains(t) Then
                    lbl.Text = "توجد قيمة منوعة"
                    lbl.ForeColor = Drawing.Color.Red
                    lbl.Visible = True
                End If
            Next
        Next




    End Sub
ارجو ابداء الاراء
الرد }}}
تم الشكر بواسطة:
#8
الثغرة ما زالت موجودة، وستبقى دائما، ولتفاديها نستخدم: الـ stored procedures أو parameters أو linq.

لو افترضنا ان تطبيقنا (تطبيق سطح مكتب أو تطبيق ويب)، به نموذج لتسجيل الدخول، وكان كود الاستعلام كـ:

كود :
[align=left]"select * from users where uname like '" & textbox.text & "' pass like '" & textbox2.text & "'"
[/align]

ثم أدخل المستخدم في مربع النص الأول كلمة: user، مثلا، ثم في مربع النص الثاني حقن هذه الجملة:
كود :
[align=left]123' or 'd' = 'd
[/align]

سوف تصبح جملة الاستعلام هكذا:
كود :
[align=left]"select * from users where username like 'user' pass like '123' or 'd' = 'd'"
[/align]

النتيجة:
كود :
[align=left]messagebox.show("تم تسجيل الدخول بنجاح")
[/align]

الاستعلامات المخزنة stored procedures، تتعامل مع وسيطات يتم استخدامها كنصوص وليس كأوامر sql....
جملة الاستعلام السابقة تصبح:
كود :
[align=left]create procedure login(@un nvarchar(), @pas nvarchar())
as
select * from users where uname = @un and pass = @pas
[/align]

الـ QueryString:
كود :
[align=left]For Each qs As String In Request.QueryString.AllKeys
    If Request.QueryString(qs).Contains("'") Then
        Response.Write("<div align=center><h2>لقد كتبت قيمة ممنوعة بالرابط</h2></div>")
        Exit For
    End If
Next qs
[/align]
الرد }}}
تم الشكر بواسطة:
#9
بارك الله فيك وزادك قدرا وفضلا وعلما ينفعك دنيا واخرى.
الرد }}}
تم الشكر بواسطة:
#10
طيب اخي كيف اعدل على التالي ليكون استعلام مخزن
كود :
Dim cm As New OleDbCommand("select un,ps from tb where un=@un and ps=@ps", con)        cm.Parameters.AddWithValue("@un", OleDbType.VarChar).Value = un.Text
        cm.Parameters.AddWithValue("@ps", OleDbType.VarChar).Value = ps.Text
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف اجعل موقعي متوافق مع الجوال nabil.1710 1 1,599 08-04-19, 02:40 AM
آخر رد: حريف برمجة
  اين ارفع موقعي المصمم بـ ASP.net + SQLserver AbaAlHaitham 6 3,232 09-12-12, 11:18 AM
آخر رد: الميسري

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم