تحدث هجمات حقن SQL بسبب عيوب في بيانات برنامجنا، دعنا نلقي نظرة على كيفية استخدام وظيفة instr في asp لمنع هجمات حقن SQL بشكل فعال. الشيء المحدد يجب أن يكون مثل هذا.
إذا كان instr(Request(id), )>0 أو instr(Request(id),')>0 ثم Response.redirect Index.htm
بالطبع، يمكنك أيضًا كتابة ما تريد بعد ذلك!
دعونا نتعلم أولاً وظيفة instr:
قواعد اللغة
InStr([ابدأ،]string1،string2[، قارن])
يحتوي بناء جملة الدالة InStr على المعلمات التالية:
وصف المعلمة
البداية اختيارية. تعبير رقمي يحدد موضع البداية لكل بحث. إذا تم حذفه، سيبدأ البحث في موضع الحرف الأول. إذا كانت البداية تحتوي على قيمة فارغة، فسيحدث خطأ. إذا تم تحديد المقارنة، فإن معلمة البداية مطلوبة.
السلسلة 1 مطلوبة. يقبل تعبير سلسلة للبحث عنه.
سلسلة2
مطلوب. تعبير السلسلة المراد البحث عنه.
المقارنة اختيارية. قيمة رقمية تشير إلى نوع المقارنة المستخدمة عند تقييم السلاسل الفرعية. راجع قسم الإعدادات لمعرفة القيم الرقمية. إذا تم حذفه، سيتم إجراء مقارنة ثنائية.
يمكن أن تحتوي معلمة المقارنة على القيم التالية:
وصف القيمة الثابتة
vbBinaryCompare 0 يقوم بإجراء مقارنة ثنائية.
vbTextCompare 1 يقوم بمقارنة النص.
[قيمة الإرجاع]
ترجع الدالة InStr القيم التالية:
إذا عاد InStr
السلسلة 1 طولها صفر 0
السلسلة 1 فارغة خالية
السلسلة 2 هي بداية بطول صفر
السلسلة 2 فارغة خالية
لم يتم العثور على السلسلة 2 0
ابحث عن السلسلة 2 في السلسلة 1 ابحث عن موضع السلسلة المطابقة
ابدأ> لين (سلسلة 2) 0
يستخدم المثال التالي سلسلة البحث InStr:
خافت SearchString، SearchChar، MyPos
SearchString =XXpXXpXXPXXP ' السلسلة المطلوب البحث عنها.
SearchChar = P 'ابحث عن P.
MyPos = Instr(4, SearchString, SearchChar, 1) 'ترجع مقارنة النص 6 بدءًا من الحرف الرابع.
MyPos = Instr(1, SearchString, SearchChar, 0) 'ترجع المقارنة الثنائية 9 بدءًا من الحرف الأول.
MyPos = Instr(SearchString, SearchChar) 'إرجاع 9.
'الإعدادات الافتراضية للمقارنة الثنائية (تم حذف الوسيطة الأخيرة).
MyPos = Instr(1, SearchString, W) 'ترجع المقارنة الثنائية 0 بدءًا من الحرف 1 (لم يتم العثور على W).
لاحظ أن الدالة InStrB تستخدم بيانات البايت الموجودة في السلسلة، لذلك لا تقوم InStrB بإرجاع موضع الحرف للتواجد الأول لسلسلة واحدة في سلسلة أخرى، ولكن موضع البايت.
ملخص: وظيفة instr هي: إرجاع موضع التواجد الأول لحرف أو سلسلة في سلسلة أخرى. حسنًا، دعونا نلقي نظرة على أي رمز:
إذا كان instr(Request(id), )>0 أو instr(Request(id),')>0 إذن
المعنى: قارن بين المواضع المحددة للأحرف (المسافة) والأحرف (') في الطلب (المعرف) (مقارنة ثنائية). إذا تم العثور على (المسافة) و(') الأحرف، فهي العبارة بعد ذلك!
الآن الجميع يفهم المعنى!
عندما رأيته لأول مرة قلت ماذا لو كان في asp؟ أليس من الخطأ ارتكاب خطأ عند إضافة أحرف (؛ أو،) وأحرف أخرى إلى المعرف = 90؟ (نعم الجواب نعم :)
ربما قال شخص آخر، سأضيف بعض الأحرف في العبارة if instr(Request(id), )>0 أو instr(Request(id),')>0 ثم على سبيل المثال قم بتغييرها إلى: if instr(Request (id ), )>0 أو instr(Request(id),')>0 أو instr(Request(id),;)>0 أو instr(Request(id),, )>0 ثم
انتظر، يمكنك إضافته لاحقًا، هاها! (هذا جيد! لكنه أسوأ :)
نعم، بعد إضافة هذا، يمكنه بالفعل هزيمة بعض من يسمون بالهاكرز!
في الحقيقة ليس من الضروري هل نسيت الجملة instr(Request(id), )>0 حتى أنه قارنها بـ (space)! وطالما أن هذه الجملة موجودة، ألن يكون من غير المجدي أن يقولها من يسمون بالهاكرز، و1 = 1؟