رأيت خطأ أساسيًا شائعًا في كود العديد من المشاركات في المنتدى، وهو نوع الحقل الخاطئ. يرتبط البرنامج وقاعدة البيانات ارتباطًا وثيقًا. تستخدم حقول قاعدة البيانات الخاصة بنوع النص أو نوع الوقت علامات الاقتباس المفردة. 1. الأخطاء الشائعة التي يرتكبها المبتدئون
رأيت خطأ أساسيًا شائعًا في كود العديد من المشاركات في المنتدى، وهو نوع الحقل الخاطئ.
يرتبط البرنامج وقاعدة البيانات بشكل وثيق. تستخدم حقول قاعدة البيانات الخاصة بنوع النص أو نوع الوقت علامات الاقتباس المفردة.
على سبيل المثال، العبارة المعدلة التالية:
تحديث conn.execute يقوم بتعيين التهم counts='&counts&' حيث num=&num& وAtime='&now()&'
الجانب الأيسر من علامة المساواة هو اسم الحقل، والجانب الأيمن من علامة المساواة هو اسم المتغير الذي تم تمريره. حقل التعداد من نوع النص، لذا يجب إضافة علامات الاقتباس المفردة قبل الكتابة وبعدها سواء كان ذلك كتابةً أو استعلامًا، في عبارة البحث اللاحقة، يكون الحقل num من النوع الرقمي، لذلك لا توجد علامات اقتباس مفردة قبله وبعده، ويكون حقل Atime من النوع الزمني، لذا يلزم وجود علامات اقتباس مفردة قبله وبعده.
الشيء الأكثر أهمية هو الاستعلام عن طريق المعرف. حقل المعرف فريد ومن النوع الرقمي، ومن الواضح أنه لا يمكن أن يكون هناك علامات اقتباس مفردة قبل وبعد الاستعلام عن رقم المعرف.
تحديث conn.execute يقوم بتعيين counts='&counts&' حيث المعرف='&id&' 'طريقة خاطئة في الكتابة
تحديث conn.execute يقوم بتعيين التهم counts='&counts&' حيث المعرف=&id 'الطريقة الصحيحة للكتابة
2. الوصول إلى اتصال قاعدة البيانات
عادةً ما تكون هناك طريقتان للاتصال بقواعد البيانات، ولا يعرف المبتدئون أي طريقة يجب استخدامها، أو أي طريقة يجب استخدامها تحت أي ظروف، أو أنهم لا يعرفون مبادئ كليهما.
① الاتصال مباشرة بملفات قاعدة البيانات
تعيين conn = Server.CreateObject(ADODB.Connection)
conn.Open DRIVER={برنامج تشغيل Microsoft Access (*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
②قم بتوصيل ملف قاعدة البيانات من خلال مصدر البيانات
تعيين conn = Server.CreateObject(ADODB.Connection)
conn.Open Provider=Microsoft.Jet.OLEDB.4.0;
إذن، أيهما أفضل بالطبع هو الثاني، لأن الأول هو أن متصفح العميل يقرأ قاعدة البيانات مباشرة، لذا فإن الأمان مختلف كثيرًا، والثاني متصل من خلال مصدر البيانات. الذي يستخدم بيانات الخادم، الأداة المصدر متصلة وليس لها علاقة بالعميل، لذلك لن يتم كشف قاعدة البيانات للعميل، وعامل الأمان أعلى بكثير.
تطبيق البرنامج المطابق لقاعدة بيانات ACCESS: ① الاتصال مباشرة بملفات قاعدة البيانات
conn.Open DRIVER={برنامج تشغيل Microsoft Access (*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
بالنسبة لطريقة الاتصال بقاعدة البيانات هذه، أضف العبارة:
تعيين rs=server.createobject(adodb.recordset) '(الكتابة الصحيحة)
rs.open حدد * من dndj,conn,1,3
rs.addnew
روبية (بها) = ب
rs(bm) = bm
rs(xm) = xm
rs(xsq) = xsq
rs.update
rs. Close
تعيين RS=لا شيء
تعيين rs=server.createobject(adodb.recordset) '(كتابة خاطئة)
sql=insert في قيم dndj(bh,bm,xm,xsq)('bh','bm','xm','xsq')
rs.open SQL، كون، 1،3
تطبيق البرنامج المطابق لقاعدة بيانات ACCESS: ② ربط ملفات قاعدة البيانات من خلال مصادر البيانات
conn.Open Provider=Microsoft.Jet.OLEDB.4.0;
بالنسبة لطريقة الاتصال بقاعدة البيانات هذه، أضف العبارة:
قم بإدراج conn.exe في قيم dndj(bh,bm,xm,xsq)('&bh&','&bm&','&xm&','&xsq&') '(الكتابة الصحيحة)
تعيين rs=server.createobject(adodb.recordset) '(كتابة خاطئة)
sql=insert في قيم dndj(bh,bm,xm,xsq)('bh','bm','xm','xsq')
rs.open SQL، كون، 1،3
3. تطبيق علامات الاقتباس المزدوجة
عادةً ما نكتب رابطًا فائقًا مثل هذا <a href=abc.asp?id=<%=rs(id)%>>الرابط الفائق</a>
ولكن ماذا لو تم تجميع هذا الارتباط التشعبي في asp؟
Response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(الكتابة الصحيحة)
Response.write <a href='abc.asp?id=&rs(id)&'>Super Connection</a> '(كتابة صحيحة)
Response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(الكتابة الصحيحة)
Response.write <a href=abc.asp?id=<%=rs(id)%>>اتصال فائق</a> '(كتابة خاطئة)
Response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(كتابة خاطئة)
يتم تجميع النموذج في asp <input type=text name=id value=<%rs(id)%> />
Response.write <input type=text name=id value=&rs(id)& /> '(الكتابة الصحيحة) ملاحظة: هناك ثلاث علامات اقتباس مزدوجة هنا
Response.write <input type='text' name='id' value='&rs(id)&' /> '(الكتابة الصحيحة)
Response.write <input type=text name=id value=&rs(id)& /> '(الكتابة الصحيحة)
Response.write <نوع الإدخال=اسم النص=قيمة المعرف=<%=rs(id)%> /> '(كتابة خاطئة)
Response.write <input type=text name=id value=&rs(id)& /> '(كتابة خاطئة)
4. عدة طرق لمنع تنزيل قاعدة بيانات ACCESS
تستخدم العديد من المواقع الديناميكية قواعد البيانات بشكل مكثف، ومن الطبيعي أن تصبح قاعدة البيانات هي الملف الأساسي للموقع. بمجرد تنزيل قاعدة البيانات بشكل غير قانوني، فمن المحتمل جدًا أن يقوم الأشخاص الضارون بتدمير الموقع. أو سرقة المعلومات.
تنطبق الطرق الواردة أدناه على المستخدمين الذين يستخدمون مساحة المضيف الظاهري والمستخدمين الذين لديهم حقوق التحكم في IIS!
1: شراء مساحة مضيف افتراضية مناسب لأولئك الذين ليس لديهم تحكم IIS
1: استخدم خيالك لتعديل اسم ملف قاعدة البيانات
هذا هو الأكثر أساسية. لا أعتقد أن هناك الكثير من الأشخاص الذين هم كسالى جدًا لتغيير اسم ملف قاعدة البيانات الآن، أليس كذلك؟ أما بالنسبة للتغيير، فالأمر متروك لك، على الأقل تأكد من أن اسم الملف معقد ولا يمكن تخمينه. بالطبع، في هذا الوقت، لا يمكن للدليل الذي توجد به قاعدة البيانات الخاصة بك أن يتمتع بأذونات تصفح الدليل!
2: تغيير لاحقة اسم قاعدة البيانات إلى ASA، ASP، إلخ.
سمعت أن هذا يحظى بشعبية كبيرة، لكنني اختبرته عدة مرات ووجدت أنه ليس مثاليًا. إذا كنت تريد حقًا منع التنزيلات، فأنت بحاجة إلى إضافة بعض الحقول الثنائية والإعدادات الأخرى، باختصار، إنه أمر معقد معقدة (إذا كانت قاعدة البيانات الخاصة بك تحتوي على الكثير، وإذا كان الأمر كذلك، فهذه الطريقة ليست جيدة حقًا)
3: أضف # قبل اسم قاعدة البيانات
ما عليك سوى إضافة # إلى الاسم الأمامي لملف قاعدة البيانات، ثم تعديل عنوان قاعدة البيانات في ملف اتصال قاعدة البيانات (مثل conn.asp). المبدأ هو أنه عند التنزيل، يمكن التعرف فقط على الجزء الموجود قبل علامة #، وسيتم إزالة الأجزاء التالية تلقائيًا، على سبيل المثال، إذا كنت تريد التنزيل: http://bbs.bccn.net/date/#123 .mdb (على افتراض وجوده). سواء كان IE أو FLASHGET وما إلى ذلك، فإن ما تحصل عليه هو http://bbs.bccn.net/date/index.htm
بالإضافة إلى ذلك، يؤدي الاحتفاظ ببعض المسافات في اسم ملف قاعدة البيانات أيضًا دورًا مشابهًا نظرًا لخصوصية بروتوكول HTTP لتحليل العنوان، سيتم ترميز المسافات كـ %20، مثل http://bbs.bccn.net/date. /123 456.mdb
عند التنزيل، http://bbs.bccn.net/date/123%20456.mdb. لا يحتوي دليلنا على الملف 123%20456.mdb على الإطلاق، لذا فإن التنزيل غير صالح. حتى إذا كشفت عن عنوان قاعدة البيانات، فلن يتمكن الآخرون عمومًا من تنزيله. من الأفضل استخدام مسافة #+ في كلا الطريقتين، مثل http : //bbs.bccn.net/date/#123 456.mdb
4:تشفير قاعدة البيانات
بعد استخدام ACCESS لفتح قاعدة البيانات الخاصة بك في الوضع الحصري، انتقل إلى الأدوات-الأمان-تعيين كلمة مرور قاعدة البيانات، وقم بتعديل صفحة اتصال قاعدة البيانات بعد التشفير، مثل:
conn.open driver={برنامج تشغيل الوصول إلى Microsoft (*.mdb)};uid=admin;pwd=كلمة مرور قاعدة البيانات;dbq=مسار قاعدة البيانات
بعد هذا التعديل، حتى لو تم تنزيل قاعدة البيانات، فلن يتمكن الآخرون من فتحها (بشرط ألا يتم تسريب كلمة المرور الموجودة في صفحة اتصال قاعدة البيانات الخاصة بك)
ولكن تجدر الإشارة إلى أنه نظرًا لأن آلية التشفير الخاصة بقاعدة بيانات Access بسيطة نسبيًا، فإن فك التشفير يكون سهلاً حتى لو تم تعيين كلمة مرور. يقوم نظام قاعدة البيانات بتكوين سلسلة مشفرة عن طريق XORing لكلمة المرور التي أدخلها المستخدم بمفتاح ثابت، ويخزنها في منطقة ملف *.mdb بدءًا من العنوان &H42. لذلك يمكن للمبرمج الجيد بسهولة إنشاء برنامج صغير يحتوي على عشرات الأسطر للحصول على كلمة المرور لأي قاعدة بيانات Access بسهولة. لذلك، طالما تم تنزيل قاعدة البيانات، يظل أمانها غير معروف.
ثانيًا: التحكم في المضيف (بالطبع لا يزال من الممكن استخدام إعدادات المساحة الافتراضية هنا)
5: يتم وضع قاعدة البيانات خارج دليل الويب
إذا كان دليل الويب الخاص بك هو e:/webroot، فيمكنك وضع قاعدة البيانات في المجلد e:/data والانتقال إلى صفحة اتصال قاعدة البيانات في e:/webroot.
قم بتعديل عنوان اتصال قاعدة البيانات إلى النموذج: ../data/#123 456.mdb، بحيث يمكن استدعاء قاعدة البيانات بشكل طبيعي، ولكن لا يمكن تنزيلها لأنها غير موجودة في دليل الويب! هذه الطريقة مناسبة بشكل عام للمستخدمين الذين يشترون مساحة افتراضية.
6: استخدم مصدر بيانات ODBC.
في البرمجة مثل ASP، يجب أن تحاول استخدام مصادر بيانات ODBC، إن أمكن، ولا تكتب اسم قاعدة البيانات في البرنامج، وإلا فسيتم فقدان اسم قاعدة البيانات مع سرية كود مصدر ASP.
على سبيل المثال:
conn.open driver={Microsoft Access Driver (*.mdb)};dbq=&Server.MapPath(../123/abc/asfadf.mdb)
يمكن ملاحظة أنه بغض النظر عن مدى غرابة اسم قاعدة البيانات، وبغض النظر عن مدى عمق الدليل المخفي، بعد اختراق كود مصدر ASP، يمكن تنزيله بسهولة.
إذا كنت تستخدم مصدر بيانات ODBC، فلن تكون هناك مشكلة من هذا القبيل: اسم conn.open ODBC-DSN، ولكن هذا أكثر إزعاجًا إذا تم نقل الدليل، فيجب إعادة تعيين مصدر البيانات!
7: إضافة تعيين موسع لاسم قاعدة البيانات مثل MDB
يتم تحقيق هذه الطريقة عن طريق تعديل إعدادات IIS، وهي مناسبة للأصدقاء الذين لديهم تحكم IIS، ولكنها غير مناسبة للمستخدمين الذين يشترون مضيفات افتراضية (ما لم يقوم المسؤول بإعدادها). أعتقد أن هذه الطريقة هي الأفضل حاليًا. من خلال تغيير واحد فقط، يمكن منع تنزيل قاعدة بيانات الموقع بالكامل. يمكن منع التنزيلات حتى إذا تم الكشف عن عنوان الهدف دون تعديل الكود.
يثبت:
أضف تحليل التطبيق لملف .mdb في خصائص IIS---الدليل الرئيسي---التكوين---التعيين---ملحق التطبيق. لاحظ أن ملف DLL (أو EXE، وما إلى ذلك) المحدد هنا لا يبدو عشوائيًا. إذا لم يكن التحديد مناسبًا، فلا يزال من الممكن تنزيل ملف MDB. لاحظ أنه من الأفضل عدم تحديد asp.dll، وما إلى ذلك. يمكنك اختبار ذلك بنفسك
بعد هذا التعديل قم بتحميل قاعدة البيانات مثل: http://bbs.bccn.net/data/dvbbs6.mdb. سوف تظهر (أخطاء مثل 404 أو 500)
8: مميزات استخدام .net
قام Mu Niao من Dongwang بكتابة أداة WBAL لمكافحة الارتباط السريع لمنع التنزيل غير القانوني للملفات. أتذكر أن أحد الخبراء في هذا المنتدى نشر ذات مرة مكونًا إضافيًا لمكافحة التنزيل لقاعدة البيانات، وهو عبارة عن ملف .dll تم تحميله في IIS.
ومع ذلك، فإن هذا يمنع فقط التنزيلات غير المحلية وليس لديه وظيفة منع تنزيلات قاعدة البيانات فعليًا. لكن هذه الطريقة مشابهة للطريقة الخامسة
يمكنك تعديل ملف .NET بحيث لا يمكن تنزيله محليًا!
من بين هذه الطرق، يمكن تغيير الطريقتين السابعة والثامنة فقط بشكل موحد، بعد تعديل التكوين مرة واحدة، يمكن منع تنزيل قاعدة بيانات الموقع بأكمله، وتتطلب الطرق العديدة الأخرى تعديل اسم قاعدة البيانات وملف الاتصال على التوالي أكثر إزعاجًا، ولكن بالنسبة للأصدقاء المضيفين الظاهريين، يمكنهم القيام بذلك فقط!
في الواقع، يجب أن تكون الطريقة السادسة امتدادًا للطريقة الخامسة، والتي يمكنها تحقيق وظائف خاصة. ومع ذلك، بالنسبة للمضيفين الذين لا يدعمون .net أو يخافون من الإعدادات المزعجة، فمن الأفضل استخدام الطريقة الخامسة مباشرةً. يتم استخدام الطريقة السادسة افتراضيًا، ولا يزال بإمكانك النشر عن طريق النسخ والاتصال بالمنتدى أو سجل الزوار الخاص بنفس المضيف، ثم النقر للتنزيل (لأن هذه الصفحات المرجعية من نفس المضيف).
كل من هذه الأساليب لها إيجابياتها وسلبياتها، لذا يرجى استخدامها بشكل انتقائي. هذه الطرق ليست آمنة تمامًا، ويحتاج مسؤولو مواقع الويب أيضًا إلى الانتباه إلى أمان بعض الأنظمة وأمان كتابة كود ASP نفسه، وإلا فإنه لا يزال من الممكن لأي شخص تنزيل قاعدة البيانات أو تعديلها.