تتيح لك بعض قواعد البيانات إرسال نصوص SQL متعددة في استعلام واحد. وبسبب هذا، هناك مخاطر أمنية محتملة عند تمرير المعلمات في سلسلة استعلام إلى استعلام قاعدة بيانات تم إنشاؤه ديناميكيًا. قد يحاول المتسللون تعديل عنوان URL أو تشكيل متغيرات في استعلام ديناميكي من خلال إلحاق نصوص SQL ضارة بالمعلمات الحالية. وغالبًا ما يشار إلى هذا بهجوم حقن SQL. يجب تعديل بعض رموز سلوك الخادم التي أنشأتها Dreamweaver للحد من مخاطر هجمات حقن SQL. لمزيد من المعلومات الأساسية عن حقن SQL، راجع مقال Wikipedia هذا.
ملاحظة: تم إصلاح المشكلة الموضحة في هذه المقالة في Dreamweaver 8.0.2 Updater.
عند السماح لسلسلة استعلام بتمرير معلمة، تأكد من تمرير المعلومات المتوقعة فقط. أنشأت Adobe Dreamweaver 8.0.2 Updater الذي يقلل من خطر هجمات حقن SQL. يتم تضمين هذه الإصلاحات في جميع الإصدارات اللاحقة من Dreamweaver. بعد تحديث Dreamweaver 8، ستحتاج إلى إعادة تطبيق سلوكيات الخادم على الصفحات التي تستخدمها، ثم إعادة نشر تلك الصفحات إلى الخادم.
يصف الجزء المتبقي من هذا المستند كيفية تحرير رمز Dreamweaver MX 2004 يدويًا لمنع هجمات حقن SQL باستخدام نموذج خادم ColdFusion. يتم إدراج سلوكيات الخادم التي هي عرضة لهذه الهجمات جنبًا إلى جنب مع الإصلاحات أدناه:
لا تحتاج مجموعات السجلات التي لم تتم تصفيتها إلى تعديل، ولكن تحتاج مجموعات السجلات التي تمت تصفيتها إلى ذلك. في المثال أدناه، يتم تصفية مجموعة سجلات Dreamweaver MX 2004 المسماة "Recordset1" بواسطة قيمة معرف تم تمريرها من معلمة عنوان URL. الرمز المميز أدناه هو ما يجب تغييره:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =#URL.COMMENT_ID#</cfquery>
لحماية مجموعة السجلات من هجمات حقن SQL، استخدم العلامة cfqueryparam ضمن العلامة cfquery التي تحتوي على نص SQL SELECT. سوف تتحقق علامة cfqueryparam من نوع البيانات من معلمة الاستعلام وتساعد في تأمين قواعد البيانات الخاصة بك من المستخدمين غير المصرح لهم. الخط الموجود باللون الأصفر هو الرمز الآمن المعدل:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
لحماية مجموعة السجلات من هجمات حقن SQL، استخدم العلامة cfqueryparam ضمن العلامة cfquery التي تحتوي على نص SQL INSERT. سوف تتحقق علامة cfqueryparam من نوع بيانات معلمة الاستعلام وتساعد في تأمين قواعد البيانات الخاصة بك من المستخدمين غير المصرح لهم.
الرمز الأصلي. الرمز المميز أدناه هو ما يجب تغييره:
<cfquery datasource="cafetownsend"> INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE) VALUES (<cfif IsDefined("FORM.textfield1") AND #FORM.textfield1# NEQ "">'#FORM.textfield1#'<cfelse>NULL</cfif> ,<cfif IsDefined("FORM.textfield2") AND #FORM.textfield2# NEQ "">'#FORM.textfield2#'<cfelse>NULL</cfif> ,<cfif IsDefined("FORM.textfield3") AND #FORM.textfield3# NEQ "">'#FORM.textfield3#'<cfelse>NULL</cfif> )</cfquery>
<cfquery datasource="cafetownsend"> INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE) VALUES<cfif IsDefined("FORM.textfield1") AND #FORM.textfield1# NEQ ""><cfqueryparam value="#FORM.textfield1#" cfsqltype="cf_sql_clob" maxlength="50"><cfelse>''</cfif> ,<cfif IsDefined("FORM.textfield2") AND #FORM.textfield2# NEQ ""><cfqueryparam value="#FORM.textfield2#" cfsqltype="cf_sql_clob" maxlength="50"><cfelse>''</cfif> ,<cfif IsDefined("FORM.textfield3") AND #FORM.textfield3# NEQ ""><cfqueryparam value="#FORM.textfield3#" cfsqltype="cf_sql_clob" maxlength="20"><cfelse>''</cfif> )</cfquery>
يتطلب سلوك خادم تحديث السجل ومعالج نموذج تحديث السجل مجموعة من الإصلاحات أعلاه. أولاً، ابحث عن cfquery الذي يحتوي على نص SQL SELECT وقم بتعديله كما هو موضح في مجموعة السجلات مع التصفية. ثم، ابحث عن cfquery الذي يحتوي على نص SQL UPDATE وقم بتعديله كما هو موضح في إدخال سلوكيات خادم السجل ومعالج نموذج إدراج السجل.
يُعد تعديل سلوك خادم حذف السجل مشابهًا لذلك المستخدم مع مجموعة السجلات مع التصفية.
الرمز الأصلي:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=#URL.COMMENT_ID#</cfquery>
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
لإصلاح رمز سلوك خادم تسجيل دخول المستخدم، ابحث عن علامات cfquery وأضف علامات cfqueryparam.
الرمز الأصلي:
<cfquery name="MM_rsUser" datasource="cafetownsend"> SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME='#FORM.textfield1#' AND LAST_NAME='#FORM.textfield2#'</cfquery>
<cfquery name="MM_rsUser" datasource="cafetownsend"> SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME=<cfqueryparam value="#FORM.textfield1#" cfsqltype="cf_sql_clob" maxlength="50"> AND LAST_NAME=<cfqueryparam value="#FORM.textfield2#" cfsqltype="cf_sql_clob" maxlength="50"></cfquery>
يتطلب سلوك خادم التحقق من مستخدم جديد إضافة سلوك خادم إدراج سجل إلى الصفحة أولاً. أولاً، ابحث عن cfquery الذي يحتوي على نص SQL SELECT وقم بتعديله كما هو موضح في مجموعة السجلات مع التصفية. ثم، ابحث عن cfquery الذي يحتوي على نص SQL INSERT وقم بتعديله كما هو موضح في إدخال سلوكيات خادم السجل ومعالج نموذج إدراج السجل.
بالنسبة لكائن تطبيق "مجموعة صفحة التفاصيل الرئيسية"، تحدث التغييرات أساسًا في مجموعة السجلات التي تنشئها Dreamweaver لصفحة التفاصيل. إذا لم يكن لديك مجموعة سجلات تمت تصفيتها في الصفحة الرئيسية، فلا يلزم إجراء أي تغييرات على الصفحة الرئيسية. إذا كان لديك مجموعة سجلات تمت تصفيتها في الصفحة الرئيسية، إذًا راجع مجموعة السجلات مع التصفية لتحديث رمز مجموعة السجلات.
لصفحة التفاصيل، ابحث عن cfquery الذي يحتوي على نص SQL SELECT وقم بتعديله كما هو موضح في مجموعة السجلات مع التصفية.
توصي Adobe باستخدام علامة cfqueryparam ضمن كل علامة cfquery للمساعدة في تأمين قواعد البيانات الخاصة بك من المستخدمين غير المصرح لهم. لمزيد من المعلومات، راجع: