it-swarm.asia

ما هي سلبيات استخدام PHP كود الترشيح في الكتل ، العقد ، طرق العرض ، إلخ؟

لقد رأيت عدة مرات أشخاصًا يقولون عدم استخدام فلتر PHP/PHP مخصص (من Drupal UI) في الكتل والعقد وأرشيفات الرأي والقواعد وما إلى ذلك. لقد بحثت قليلاً ولم أقم بذلك وجدت الكثير ، يبدو أن هذه هي أفضل الممارسات [Drupal التي يعرفها الجميع فقط.

أفهم أنه يشكل خطرًا أمنيًا محتملاً خاصة في أيدي المستخدمين النهائيين أو الأشخاص الجدد على Drupal أو PHP ، ولكن كمطور/أداة إنشاء مواقع ، ما هي الأسباب الحقيقية لعدم استخدام مخصص PHP من Drupal UI؟

95
Laxman13

بعض الأسباب:

  • لا يمكن التحكم في التعليمات البرمجية في قاعدة البيانات الخاصة بك كما يصعب العثور عليها بشكل عام لاحقًا.
  • رمز Eval () 'هو كثيرًا أبطأ من شيء مرمّز في ملف.
  • إذا كان هناك خطأ في مكان ما في هذا الرمز ، فستتلقى رسالة خطأ غير مفيدة للغاية (خطأ في رمز () Eval () في السطر 3) وربما تكون قد مرت بقاعدة البيانات يدويًا للعثور على الخطأ وإصلاحه. إذا كان داخل كتلة يتم عرضها في جميع الصفحات ويؤدي إلى خطأ فادح طوال الوقت على سبيل المثال.
  • ما سبق صحيح أيضًا عند الترقية من Drupal 6 to 7 وأيًا من واجهات برمجة التطبيقات التي استخدمتها تم تغييرها. لذلك سيتعين عليك نقل رمزك أثناء الترحيل. إذا كان الرمز في وحدة نمطية ، فيمكنك نقله مسبقًا واختباره ونشره فقط على الموقع الجديد. داخل العقدة أو الكتلة ، لن يعمل إلا مع Drupal 6 أو 7.
  • كما أن كتابة هذا الرمز وصيانته أصعب لأنك تعمل في حقل نصي داخل متصفحك. يسمح لك وجوده في وحدة باستخدام محرر/IDE مع إبراز بناء الجملة والإكمال التلقائي وما إلى ذلك.
  • هناك دائمًا إمكانية وجود خطأ في التكوين يمنح الأشخاص إمكانية الوصول إلى تنسيق/كتلة نص/أي شيء مع تمكين تنفيذ php. إذا لم يتم تمكين php.module (في D7 ، D6 صارمة للغاية ، على سبيل المثال لقواعد الوصول إلى الكتلة) ، فإن هذا الخطر أقل بكثير بالفعل.
  • إذا كان نظام إدارة المحتوى الخاص بك يسمح بتنفيذ PHP ، فيمكن للمهاجم الذي يجد ثغرة أمنية في XSS أو تصعيد الامتيازات أن يستخدم خادمك الآن للأشياء الخبيثة بشكل كبير (كجزء من DDOS ، وإرسال البريد العشوائي ، واستضافة البرامج الضارة ، اختراق مواقع/قواعد بيانات أخرى على الخادم ، اختراق في خوادم أخرى على الشبكة قد تكون وراء جدران الحماية). بالإضافة إلى جعل نقاط الضعف الصغيرة أكثر إيلاما ، وهذا يجعل الموقع هدفا أكثر احتمالا للهجوم إذا كان معروفا أنه يمكن يمكن استخدامها لتنفيذ php.

قد يكون هناك المزيد من الأسباب ، ولكن يجب أن يكون ذلك كافياً :)

129
Berdir

من الصعب تصحيح هذا الرمز والحفاظ عليه. لا أعرف أي طريقة لاستخدام التحكم في الإصدار لمثل هذا النوع من كود php.

وهي حقاً مخاطرة أمنية محتملة للأشخاص الجدد على Drupal أو PHP ،

17
ya.teck

بالنظر إلى حالة الفلتر PHP المستخدم في العقدة ، فإن سبب عدم استخدامه هو أنك تحد من المستخدمين الذين يمكنهم تعديل تلك العقدة ، إذا كنت لا تريد السماح لجميع المستخدمين لاستخدام الفلتر PHP.
بدلاً من استخدام عامل التصفية PHP ، من الأفضل استخدام وحدة مخصصة تستبدل نصًا معينًا في محتوى العقدة بنتيجة الرمز الذي يتم تنفيذه (بدون استخدام eval()) ، أو التي تلحق نصها الخاص بالمحتوى الأساسي للعقد. في هذه الحالة ، يمكن لأي مستخدم تحرير العقدة ، دون الحصول على إذن لإضافة تعسفي PHP رمز يتم تشغيله بعد ذلك بواسطة عامل التصفية PHP.

بشكل عام ، من الأفضل تجنب eval() لأنها تقلل من إمكانية قراءة التعليمات البرمجية ، والقدرة على التنبؤ بمسار التعليمات البرمجية (والآثار الأمنية المحتملة لذلك) قبل وقت التشغيل ، وبالتالي القدرة على تصحيح التعليمات البرمجية .

بصرف النظر عن تطوير موقع أو اختبار ، لن أقوم بتمكين عامل التصفية PHP ، أو استخدم PHP كود الذي تم تمريره إلى eval() .

تمت إزالة الفلتر PHP من Drupal 8. إنه الآن وحدة خارجية ، غير مغطى من - سياسة النصائح الأمنية . ربما يكون هذا سببًا لعدم استخدامه في خوادم الإنتاج (إذا لم تقنعك الأسباب المقدمة بالفعل).

14
kiamlaluno

إليك سبب الثغرة الأمنية لتجنب منح هذا الإذن للمستخدمين إذا كنت لا ترغب في تعديل المستخدمين غير الإداريين لقاعدة البيانات مباشرة.

<?php
echo file_get_contents(dirname(__FILE__)."/../sites/default/settings.php");
?>

اختراق القرص Drupal db أوراق الاعتماد

11
lolcode

كحل بديل للمشكلات المختلفة المحددة أعلاه - صعوبة صيانة التعليمات البرمجية ، والتحكم في الإصدار ، واكتشاف الأخطاء ، لديك إمكانية "klugey" قليلاً:

قم بإنشاء وظائف (قم بتسميةها بعناية ، وفقًا لما تفعله) في بعض الملفات التي يتم تضمينها دائمًا - إذا كان لديك وحدة مخصصة تكتبها للموقع ، فهذا مكان رائع لوضع هذه الوظائف. php الذي تدخله هو ببساطة: return my_specialfunc($somevar); - $somevar هنا من المحتمل أن يكون كائن العقدة يعمل عليه ، أو أي متغيرات أخرى ذات صلة هنا.

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

لاحظ ، مع ذلك ، أن هذا لا يحل مشاكل الأمان المحتملة. هذه تعتمد إلى حد كبير على أمان Drupal. بشكل عام ، غالبًا ما تكون التعليمات البرمجية التي تحتوي على قاعدة البيانات بمثابة كعب من الأمان - الوظائف التي تستخدم التعليمات البرمجية التي تحتوي على قاعدة البيانات تميل إلى أن تكون أكثر عرضة ل الاستغلال ، والأمان من حولهم يحتاج إلى أن يكون أكثر إحكامًا. ومع ذلك ، Drupal جيدًا بشكل عام في الحفاظ على الأمان لهذه المشكلات - فقد نشأت ثم تم تصحيحها/حلها بسرعة مع الإصدارات الجديدة .

11
James

بدلاً من القيام بشيء مثل return functionname($object) ، سيكون من الأفضل استخدام نظام الرموز/الفلاتر قدر الإمكان. هناك وحدات مثل Insert View and Embed Node يمكن أن تساعد في الظروف الشائعة التي قد يرغب الأشخاص في تضمينها PHP في العقدة أو أجسام الحظر.

7
Evan Donovan

يجب أن تهتم بإمكانية نقل بياناتك. ماذا لو قمت بترحيل العقد الخاصة بك من drupal 7 إلى drupal 8 ويحتوي بعض النص الأساسي للعقدة على <?php whatever_function_that_does_not_exist_anymore(); ?>؟

لا تفكر في مشروعك في غضون 5 أشهر ولكن في غضون 5 سنوات. التحديثات والممارسات الجيدة وقابلية النقل هي جوانب مهمة لأي مشروع جيد لتكنولوجيا المعلومات في رأيي.

يعد استخدام الوحدات الأقل مساهمة قدر الإمكان أحد جوانب ذلك أيضًا.

0
Stef Van Looveren