موصى به: الحديث عن دليل الأشجار لـ DHTML XML ASP CSS يعرض دليل الأشجار وصف مشكلة البرنامج: غالبًا ما تظهر جداول البيانات المرتبطة ذاتيا في مشاريعنا. إذا نظرنا إليهم من المنظور الكلي ، يتم تقديم الجدول بأكمله كهيكل بيانات شجرة (للحالات المعقدة ، قد يصبح رسم بياني). عندما نفعل هذا الجدول
في برمجة ASP ، يمكن القول أن مصادقة الهوية تستخدم غالبًا. ولكن كيف يمكننا تحقيق أمن المصادقة؟
صفحة التقديم النموذج: sub.htm
| ما يلي هو المحتوى المقتبس: <html> <head> <title> تسجيل الدخول المسؤول </title> <body> <name form = form1 method = post action = sub.asp> <p> المسؤول: <نوع الإدخال = اسم النص = حجم المستخدم = 25 maxLength = 20> كلمة المرور: <نوع الإدخال = اسم النص = حجم المرور = 12 maxLength = 20> <نوع الإدخال = إرسال اسم = إرسال قيمة = إرسال> </p> </form> </body> </html> |
| ما يلي هو المحتوى المقتبس: برنامج sub.asp <٪ تلقي البيانات من النموذج user = request.from (userId) تحقق مما إذا كانت البيانات المقدمة في النموذج فارغة (قد يتم التحكم في صفحة النموذج بواسطة JavaScript أو VBScript ، ولكن لا تنس التحكم فيها هنا! إذا المستخدم = ثم انتقل إلى صفحة مطالبة الخطأ! استجابة. err1.htm قد تكون هذه الجملة عديمة الفائدة ، ولكن من الأفضل إضافتها! استجابة إنهاء إذا PASS = request.from (pass) إذا تم المرور = ثم استجابة. REDIRECT ERR2.HTM استجابة إنهاء إذا انضم إلى قاعدة البيانات ملف = server.mappath (قاعدة البيانات الخاصة بك) تعيين conn = server.createBject (adodb.connection) dr = driver = {Microsoft Access Driver (*.mdb)} ؛ dbq = & file Conn.Open Dr تعيين rs = server.createBject (adodb.recordset) المفتاح هو لغة SQL هنا SQL = SELECT * من الجدول حيث user = & user & and pass = & pass & Rs.Open SQL إذا لم يكن rs.eof ثم إذا وجدت ، انتقل إلى صفحة الإدارة Response.Redirect login.asp آخر إذا لم يتم العثور عليها ، أدخل صفحة الخطأ استجابة. write err3.htm إنهاء إذا ٪> |
يشعر الجميع أن الكود أعلاه يجب أن يكون على ما يرام ، ولكن هنا مخاطرة أمنية خطيرة:
إذا أردت تسجيل الدخول إلى المسؤول ، يمكنني إدخاله في مربع إدخال نموذج sub.htm:
أدخل في مربع النص الأول: A أو 1 = 1 أو أو =
أدخل في مربع النص الثاني: A أو 1 = 1 أو أو =
أرسلها ، سترى ... woo ، استمع إلي ، هل من الجيد القيام به ، سيتم طرح الطوب مرة أخرى ...
A و 1 هي أي شخصيات
قد يسأل شخص ما لماذا تدخل هذه الشخصيات كمسؤول؟ ؟
في الواقع ، هذه الشخصيات هي خداع للغة SQL في برنامجك ودخلت بنجاح.
الجميع يرون: ابدأ البرنامج SQL هو السجل الذي يستفسر عن الجدول ويلبي المستخدم = & user & pass = & pass & ظروف.
SQL = SELECT * من الجدول حيث user = & user & and pass = & pass &
لقد أدخلت الرمز أعلاه وأصبحت:
sql = حدد * من الجدول حيث المستخدم = a أو 1 = 1 وتمرير = a أو 1 = 1
دعونا نلقي نظرة ، هل يمكن أن يكون هناك سبب لعدم الدخول؟ ؟ أعطني سببًا لعدم الدخول ، أولاً!
حقل تمرير المستخدم أعلاه هو نوع حرف وإذا كان نوعًا رقميًا ، فسيكون الأمر نفسه صحيحًا!
حل:
1. الطريقة البديلة للوظيفة:
استخدم استبدال لاستبدال إدخال المحتوى بواسطة المستخدم بأحرف خاصة لتحقيق غرض التحكم! SQL = SELECT * من الجدول حيث user = & replas
يمكن أن تحل هذه الطريقة محل حرف واحد فقط في وقت واحد. في الواقع ، لا يتم التحكم في الشخصيات الخطرة فحسب ، بل يجب أيضًا التحكم بالكامل في الشخصيات مثل> و <و و ، ٪. ولكن ماذا علي أن أفعل إذا لم أكن مؤهلاً لوظيفة الاستبدال؟ ؟
2. طريقة التحكم في البرنامج
استخدم البرنامج للتحكم في جميع المحتوى الذي أدخله العميل ، بحيث يمكنك التحكم بالكامل في أي أحرف أو رموز خطرة محتملة أدخلها العميل. سأفعل هذه الطريقة!
| ما يلي هو المحتوى المقتبس: <٪ التقاط محتوى النموذج المقدم من المستخدم user = request.from (المستخدم) PASS = request.from (pass) ... يبدأ التحكم في الدورة لأني = 1 إلى لين (المستخدم) استخدم الوظيفة المتوسطة لقراءة حرف في موضع I في المستخدم المتغير لنا = منتصف (المستخدم ، أنا ، 1) مقارنة بين الشخصيات القراءة إذا us = أو us = ٪ أو us = <أو us => أو us = & ثم إذا تم احتواء الأحرف المذكورة أعلاه ، فسيحدث رسالة خطأ. لا يمكن احتواء الشخصيات الخاصة أعلاه. استجابة. REDIRECT ERR2.HTM استجابة إنهاء إذا التالي ... ٪> |
مشاركة: تحليل ASP والإجراءات المخزنة هناك العديد من المقالات حول ASP والإجراءات المخزنة ، لكنني أشك في أن المؤلفين قد مارسوها بالفعل. قرأت الكثير من المعلومات ذات الصلة عندما كنت في البداية ووجدت أن العديد من الأساليب المقدمة لم تكن كذلك في الممارسة العملية. للتطبيقات البسيطة ، هذا