حماية سلوكيات خادم ColdFusion من ثغرات حقن SQL

حماية سلوكيات خادم ColdFusion التابع لـ Dreamweaver من هجمات حقن SQL.

المخاطر الأمنية من هجمات حقن SQL

تتيح لك بعض قواعد البيانات إرسال نصوص 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=&quot;Recordset1&quot; datasource=&quot;cafetownsend&quot;> SELECT * FROM COMMENTS WHERE COMMENT_ID =#URL.COMMENT_ID#</cfquery>

لحماية مجموعة السجلات من هجمات حقن SQL، استخدم العلامة cfqueryparam ضمن العلامة cfquery التي تحتوي على نص SQL SELECT. سوف تتحقق علامة cfqueryparam من نوع البيانات من معلمة الاستعلام وتساعد في تأمين قواعد البيانات الخاصة بك من المستخدمين غير المصرح لهم. الخط الموجود باللون الأصفر هو الرمز الآمن المعدل:

<cfquery name=&quot;Recordset1&quot; datasource=&quot;cafetownsend&quot;> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value=&quot;#URL.COMMENT_ID#&quot; cfsqltype=&quot;cf_sql_numeric&quot;></cfquery>

إدخال سلوكيات خادم السجل ومعالج نموذج إدراج السجل

لحماية مجموعة السجلات من هجمات حقن SQL، استخدم العلامة cfqueryparam ضمن العلامة cfquery التي تحتوي على نص SQL INSERT. سوف تتحقق علامة cfqueryparam من نوع بيانات معلمة الاستعلام وتساعد في تأمين قواعد البيانات الخاصة بك من المستخدمين غير المصرح لهم.

الرمز الأصلي. الرمز المميز أدناه هو ما يجب تغييره:

<cfquery datasource=&quot;cafetownsend&quot;>   INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE)   VALUES (<cfif IsDefined(&quot;FORM.textfield1&quot;) AND #FORM.textfield1# NEQ &quot;&quot;>'#FORM.textfield1#'<cfelse>NULL</cfif>   ,<cfif IsDefined(&quot;FORM.textfield2&quot;) AND #FORM.textfield2# NEQ &quot;&quot;>'#FORM.textfield2#'<cfelse>NULL</cfif>   ,<cfif IsDefined(&quot;FORM.textfield3&quot;) AND #FORM.textfield3# NEQ &quot;&quot;>'#FORM.textfield3#'<cfelse>NULL</cfif>   )</cfquery>

الرمز الآمن المعدل:

<cfquery datasource=&quot;cafetownsend&quot;>   INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE)   VALUES<cfif IsDefined(&quot;FORM.textfield1&quot;) AND #FORM.textfield1# NEQ &quot;&quot;><cfqueryparam value=&quot;#FORM.textfield1#&quot; cfsqltype=&quot;cf_sql_clob&quot; maxlength=&quot;50&quot;><cfelse>''</cfif>   ,<cfif IsDefined(&quot;FORM.textfield2&quot;) AND #FORM.textfield2# NEQ &quot;&quot;><cfqueryparam value=&quot;#FORM.textfield2#&quot; cfsqltype=&quot;cf_sql_clob&quot; maxlength=&quot;50&quot;><cfelse>''</cfif>   ,<cfif IsDefined(&quot;FORM.textfield3&quot;) AND #FORM.textfield3# NEQ &quot;&quot;><cfqueryparam value=&quot;#FORM.textfield3#&quot; cfsqltype=&quot;cf_sql_clob&quot; maxlength=&quot;20&quot;><cfelse>''</cfif>   )</cfquery>

ملاحظة: اختر قيم cfslqtype وmaxlength المناسبة لبياناتك.

تحديث السجل ومعالج نموذج تحديث السجل

يتطلب سلوك خادم تحديث السجل ومعالج نموذج تحديث السجل مجموعة من الإصلاحات أعلاه. أولاً، ابحث عن cfquery الذي يحتوي على نص SQL SELECT وقم بتعديله كما هو موضح في مجموعة السجلات مع التصفية. ثم، ابحث عن cfquery الذي يحتوي على نص SQL UPDATE وقم بتعديله كما هو موضح في إدخال سلوكيات خادم السجل ومعالج نموذج إدراج السجل.

حذف سلوك خادم السجل

يُعد تعديل سلوك خادم حذف السجل مشابهًا لذلك المستخدم مع مجموعة السجلات مع التصفية.

الرمز الأصلي:

<cfquery datasource=&quot;cafetownsend&quot;>    DELETE FROM COMMENTS    WHERE COMMENT_ID=#URL.COMMENT_ID#</cfquery>

الرمز الآمن المعدل:

<cfquery datasource=&quot;cafetownsend&quot;>   DELETE FROM COMMENTS   WHERE COMMENT_ID=<cfqueryparam value=&quot;#URL.COMMENT_ID#&quot; cfsqltype=&quot;cf_sql_numeric&quot;></cfquery>

ملاحظة: اختر قيم cfslqtype وmaxlength المناسبة لبياناتك.

تسجيل الدخول إلى سلوك خادم المستخدم

لإصلاح رمز سلوك خادم تسجيل دخول المستخدم، ابحث عن علامات cfquery وأضف علامات cfqueryparam.

الرمز الأصلي:

<cfquery name=&quot;MM_rsUser&quot; datasource=&quot;cafetownsend&quot;>   SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME='#FORM.textfield1#'   AND LAST_NAME='#FORM.textfield2#'</cfquery>

الرمز الآمن المعدل:

<cfquery name=&quot;MM_rsUser&quot; datasource=&quot;cafetownsend&quot;>   SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME=<cfqueryparam value=&quot;#FORM.textfield1#&quot; cfsqltype=&quot;cf_sql_clob&quot; maxlength=&quot;50&quot;>   AND LAST_NAME=<cfqueryparam value=&quot;#FORM.textfield2#&quot; cfsqltype=&quot;cf_sql_clob&quot; maxlength=&quot;50&quot;></cfquery>

ملاحظة: اختر قيم cfslqtype وmaxlength المناسبة لبياناتك.

التحقق من سلوك خادم المستخدم الجديد

يتطلب سلوك خادم التحقق من مستخدم جديد إضافة سلوك خادم إدراج سجل إلى الصفحة أولاً. أولاً، ابحث عن cfquery الذي يحتوي على نص SQL SELECT وقم بتعديله كما هو موضح في مجموعة السجلات مع التصفية. ثم، ابحث عن cfquery الذي يحتوي على نص SQL INSERT وقم بتعديله كما هو موضح في إدخال سلوكيات خادم السجل ومعالج نموذج إدراج السجل.

مجموعة صفحة التفاصيل الرئيسية

بالنسبة لكائن تطبيق "مجموعة صفحة التفاصيل الرئيسية"، تحدث التغييرات أساسًا في مجموعة السجلات التي تنشئها Dreamweaver لصفحة التفاصيل. إذا لم يكن لديك مجموعة سجلات تمت تصفيتها في الصفحة الرئيسية، فلا يلزم إجراء أي تغييرات على الصفحة الرئيسية. إذا كان لديك مجموعة سجلات تمت تصفيتها في الصفحة الرئيسية، إذًا راجع مجموعة السجلات مع التصفية لتحديث رمز مجموعة السجلات.

لصفحة التفاصيل، ابحث عن cfquery الذي يحتوي على نص SQL SELECT وقم بتعديله كما هو موضح في مجموعة السجلات مع التصفية.

معلومات إضافية

توصي Adobe باستخدام علامة cfqueryparam ضمن كل علامة cfquery للمساعدة في تأمين قواعد البيانات الخاصة بك من المستخدمين غير المصرح لهم. لمزيد من المعلومات، راجع:

احصل على مساعدة بشكل أسرع وأسهل

مستخدم جديد؟