20-04-13, 05:16 PM
الثغرة ما زالت موجودة، وستبقى دائما، ولتفاديها نستخدم: الـ stored procedures أو parameters أو linq.
لو افترضنا ان تطبيقنا (تطبيق سطح مكتب أو تطبيق ويب)، به نموذج لتسجيل الدخول، وكان كود الاستعلام كـ:
ثم أدخل المستخدم في مربع النص الأول كلمة: user، مثلا، ثم في مربع النص الثاني حقن هذه الجملة:
سوف تصبح جملة الاستعلام هكذا:
النتيجة:
الاستعلامات المخزنة stored procedures، تتعامل مع وسيطات يتم استخدامها كنصوص وليس كأوامر sql....
جملة الاستعلام السابقة تصبح:
الـ QueryString:
لو افترضنا ان تطبيقنا (تطبيق سطح مكتب أو تطبيق ويب)، به نموذج لتسجيل الدخول، وكان كود الاستعلام كـ:
كود :
[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]