تشير هجمات حقن SQL إلى استغلال ثغرات التصميم لتشغيل أوامر Sql على الخادم الهدف وتنفيذ هجمات أخرى لإنشاء أوامر Sql ديناميكيًا دون التحقق من البيانات التي أدخلها المستخدم، وهذا هو السبب الرئيسي وراء نجاح هجمات حقن SQL.
على سبيل المثال:
إذا تم تحديد بيان الاستعلام الخاص بك * من admin حيث اسم المستخدم=''"&user&"'' وكلمة المرور=''"&pwd&"''"
لذا، إذا كان اسم المستخدم الخاص بي هو: 1'' أو ''1''=''1
بعد ذلك، سيصبح بيان الاستعلام الخاص بك:
حدد * من المشرف حيث اسم المستخدم=''1 أو ''1''=''1'' وكلمة المرور=''"&pwd&"''"
بهذه الطريقة، سيتم تمرير بيان الاستعلام الخاص بك، ويمكنك الدخول إلى واجهة الإدارة الخاصة بك.
ولذلك، يجب التحقق من مدخلات المستخدم عند اتخاذ الاحتياطات اللازمة. تحويل أو تصفية بعض الأحرف الخاصة، مثل علامات الاقتباس المفردة، وعلامات الاقتباس المزدوجة، والفواصل المنقوطة، والفواصل، والنقطتين، وأرقام الاتصال، وما إلى ذلك.
الأحرف والسلاسل الخاصة التي يجب تصفيتها هي:
مستخدم صافي
xp_cmdshell
/يضيف
exec master.dbo.xp_cmdshell
صافي مسؤولي المجموعة المحلية
يختار
عدد
تصاعدي
شار
منتصف
''
:
"
إدراج
حذف من
إسقاط الجدول
تحديث
اقتطاع
من
%
فيما يلي رمزان للوقاية كتبتهما حول حل هجمات الحقن للرجوع إليهما!
إصدار التعليمات البرمجية js لمنع هجمات حقن SQL:
<لغة النص = "****">
<!--
فار url = location.search;
var re=/^?(.*)(select%20|insert%20|delete%20from%20|count(|drop%20table|update%20truncate%20|asc(|mid(|char (|xp_cmdshell|exec%20master|net%20localgroup%20administrators|"|../../image/bbs3000/whatchutalkingabout_smile.gifnet%20user|''|%20or%20)(.*)$/gi;
var e = re.test(url);
إذا (ه) {
تنبيه("العنوان يحتوي على أحرف غير قانونية ~");
location.href="error.asp";
}
//-->
<النص البرمجي>
[نهاية الكود]
إصدار ASP من التعليمات البرمجية لمنع هجمات حقن SQL ~:
[بدء الكود]
<%
على خطأ استئناف التالي
خافت strTemp
إذا LCase(Request.ServerVariables("HTTPS")) = "إيقاف" ثم
ستريمب = "http://"
آخر
سترتيمب = "https://"
End If
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
إذا Request.ServerVariables("SERVER_PORT") <> 80 ثم strTemp = strTemp & ": "& Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
If Trim(Request.QueryString) <> "" ثم strTemp = strTemp & "؟" & Trim(Request.QueryString)
strTemp = LCase(strTemp)
إذا كان Instr(strTemp،"select%20") أو Instr(strTemp،"insert%20") أو Instr(strTemp، "delete%20from") أو Instr(strTemp,"count(") أو Instr(strTemp,"drop%20table") أو Instr(strTemp,"update%20") أو Instr(strTemp,"truncate%20") أو Instr(strTemp،"asc(") أو Instr(strTemp،"mid(") أو Instr(strTemp،"char(") أو Instr(strTemp،"xp_cmdshell") أو Instr(strTemp،"exec%20master") أو Instr(strTemp,"net%20localgroup%20administrators") أو Instr(strTemp,":":") أو Instr(strTemp,"net%20user") أو Instr(strTemp,"''") أو Instr(strTemp,"%20or %20") إذن
Response.اكتب "<script language=''****''>"
Response.اكتب "تنبيه (''عنوان غير قانوني!!'')؛"
Response.Write "location.href=''error.asp'';"
الاستجابة.اكتب "<script>"
نهاية إذا
%>
فيما يلي طرق الوقاية البسيطة نسبيًا، وهي طرق يعرفها الجميع للتو. آمل أن أتمكن من تقديم بعض المساعدة لك ~
بشكل أساسي لنقل المتغير الرقمي:
المعرف = Request.QueryString("id")
إذا لم يكن (isNumeric(id)) إذن
الاستجابة.اكتب "عنوان غير قانوني ~"
الاستجابة.النهاية
نهاية إذا