تصلب PHP في WordPress

نشرت: 2021-06-29

يعمل WordPress على PHP ، وهو مكون أساسي يجب الانتباه إليه عند تقوية موقع WordPress الخاص بك. ستغطي هذه المقالة بعضًا من أكثر الفاكهة شيوعًا والتي يمكنك معالجتها عندما يتعلق الأمر بأمان PHP لـ WordPress.

تنبيه - كن حذرًا عند إجراء تغييرات على إعدادات PHP. قد تؤدي الإعدادات والصياغة غير الصحيحة إلى إتلاف موقع الويب الخاص بك. اختبر دائمًا تغييراتك في بيئة التطوير أو التدريج قبل إجراء تغييرات في الإنتاج.

جدول المحتويات

  • استخدم أحدث إصدار من PHP
  • قم بإيقاف إصدار PHP
  • قم بإزالة أي ملفات phpinfo ()
  • قم بإيقاف أخطاء وتحذيرات PHP
  • يشمل القيد
  • يتضمن تعطيل الملف البعيد
  • تعطيل أو الحد من الوظائف الخطرة
  • منع تنفيذ PHP في الدلائل الحساسة
  • استنتاج

استخدم أحدث إصدار من PHP

بالإضافة إلى التأكد من تصحيح نظام التشغيل الخاص بك ، وخادم MySQL ، وخادم الويب (مثل Nginx ، و Apache ، و IIS ...) ، من الضروري أيضًا التأكد من تشغيل إصدار مدعوم بالكامل من PHP 1 .

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

قم بإيقاف إصدار PHP

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

لحسن الحظ ، من السهل تعطيل هذا باستخدام إعداد expose_php. في ملف تكوين php.ini الخاص بك ، ما عليك سوى إضافة ما يلي.

expose_php = Off

قم بإزالة أي ملفات phpinfo ()

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

إذا كنت تريد بالفعل تشغيل phpinfo () ، فمن الأفضل القيام بذلك من سطر الأوامر ، على النحو التالي.

php -i

إذا كان لديك أكثر من تكوين واحد لـ PHP على نظامك (شائع جدًا) ، يمكنك استخدام الأمر التالي لتحديد ملف php.ini الذي تريد استخدامه.

php -c /etc/php/apache2/php.ini -i

قم بإيقاف أخطاء وتحذيرات PHP

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

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

لحسن الحظ ، من السهل تعطيل هذا باستخدام إعداد display_errors. في ملف تكوين php.ini الخاص بك ، ما عليك سوى إضافة ما يلي.

display_errors = Off
log_errors = On

يشمل القيد

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

include "../../../../etc/passwd"

من خلال ضبط إعداد open_basedir في php.ini ، يمكنك توجيه PHP للسماح فقط بالتضمينات داخل دليل معين وأدناه. على الرغم من أن هذا لا يقضي على الثغرات الأمنية المتعلقة بتضمين الملفات ، إلا أنه بالتأكيد يجعلها أكثر تقييدًا ، وكذلك بعض الهجمات الأكثر تقدمًا التي قد تؤدي إلى تنفيذ التعليمات البرمجية (عندما يمكن للمهاجم تنفيذ أوامر على الخادم الخاص بك).

يمكنك ضبط إعداد open_basedir PHP كما يلي في ملف php.ini.

open_basedir = /var/www/html/example.com

يتضمن تعطيل الملف البعيد

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

لتعطيل تضمين الملف البعيد ، استخدم خياري allow_url_fopen و allow_url_include PHP في ملف php.ini الخاص بك على النحو التالي.

allow_url_fopen = Off
allow_url_include = Off

تعطيل أو الحد من الوظائف الخطرة

في حالة تمكن المهاجم ، على الرغم من جميع الإجراءات الأمنية الخاصة بك ، من العثور على ثغرة أمنية في PHP في أمان WordPress الخاص بك ، والتي يمكنهم استغلالها ، فإن آخر شيء تريده هو أن يتمكنوا من تشغيل تعليمات برمجية عشوائية على الخادم الخاص بك . إذا كان المهاجم قادرًا على تشغيل تعليمات برمجية عشوائية على الخادم الخاص بك ، فيمكنه على الأرجح تثبيت Webshell أو إنشاء غلاف عكسي لمزيد من التحكم في الخادم الخاص بك واستخدامه للقيام بالمزايدة الشائنة (مثل نشر البرامج الضارة ، أو استخدام موقع الويب الخاص بك لحملات التصيد أو الرفض من هجمات الخدمة ، أو حتى تعدين العملة المشفرة).

من خلال تعطيل وظائف مثل shell_exec () و system () ، يمكنك منع المستخدمين والمهاجمين من الاستفادة من هذه الوظائف الخطرة. في حين أنه قد تكون هناك أسباب مشروعة للاستفادة من هذه الوظائف ، إلا أنها قليلة جدًا ومتباعدة ، وعادة ما تكون هناك طريقة أكثر أمانًا لتحقيق نفس النتيجة.

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

فيما يلي مجموعة من الوظائف التي يحتمل أن تكون خطرة والتي قد ترغب في تعطيلها في PHP باستخدام إعداد disable_functions في ملف php.ini الخاص بك.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid,
posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,
posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, 
posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, 
posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, 
proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>

منع تنفيذ PHP في الدلائل الحساسة

بشكل افتراضي ، يُسمح بدليل wp-content / uploads ، والذي يستخدم لتحميل السمات والإضافات والصور ومقاطع الفيديو والملفات الأخرى إلى موقع الويب الخاص بك بتنفيذ كود PHP. هذا محفوف بالمخاطر إلى حد ما - إذا كان المهاجم قادرًا بطريقة ما على الاستفادة من ثغرة في تحميل ملف في مكون إضافي أو سمة ، فقد يتمكن من تحميل Webshell أو نوع مشابه من الباب الخلفي. نظرًا لأن تنفيذ PHP سيكون مسموحًا به داخل دليل wp-content / uploads ، فقد يكون هذا المهاجم قادرًا بالفعل على تنفيذ كود PHP هذا للقيام بالمزايدة الضارة.

يعد منع هذا أمرًا بسيطًا للغاية - قم بتعطيل تنفيذ PHP داخل ملف wp-content / uploads والدليل. تتمثل الطريقة الساذجة في حظر الوصول إلى ملفات * .php مثل استخدام htaccess .

<Files *.php>
deny from all
</Files>

ومع ذلك ، من السهل نسبيًا تجاوز التكوين أعلاه - ستقوم PHP في معظم الحالات بتنفيذ ملفات .phtml .php3 بكل سرور. الطريقة الأكثر مقاومة للرصاص هي تعطيل محرك PHP داخل الدليل. يجب وضع تكوين .htaccess التالي داخل wp-content / uploads ودليل wp-include (دليل آخر يستهدفه المهاجمون عادة).

php_flag engine off

أمان PHP لـ WordPress - الأفكار النهائية

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

إذا كنت تريد معرفة المزيد حول كيفية تقوية موقع WordPress الخاص بك ، فاقرأ دليلنا النهائي حول أمان WordPress وتقويته.

المراجع المستخدمة في هذه المقالة [ + ]

المراجع المستخدمة في هذه المقالة
1 https://www.php.net/supported-versions.php