Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
setup-wordpress-with-security-best-practice — دليل شامل لتعزيز أمان تثبيتات ووردبريس: يغطي تغييرات مستخدم المدير، فرض HTTPS، أمان الإضافات، صلاحيات الملفات، وتكوين الخادم للمواقع الثابتة للشركات. | Kitploit
أدوات/GitHubGitHub/password123456/setup-wordpress-with-security-best-practice
تدقيق التكوينأمن الويبالتعلم والتعليم
GitHubpassword123456/setup-wordpress-with-security-best-practice

setup-wordpress-with-security-best-practice

دليل شامل لتعزيز أمان تثبيتات ووردبريس: يغطي تغييرات مستخدم المدير، فرض HTTPS، أمان الإضافات، صلاحيات الملفات، وتكوين الخادم للمواقع الثابتة للشركات.

عرض المستودع

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
294منذ 2 سنواتتمت المراجعة من قبل Kitploit

إعداد ووردبريس مع أفضل ممارسات الأمان

Hits

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

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

لا يتضمن هذا المستند جميع المحتويات اللازمة لتأمين ووردبريس.

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

إذا وجدت هذا مفيدًا، يرجى دعم المزيد من التحسينات عن طريق "نجمة"🌟.


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

  • 1. التأكد من تغيير اسم المستخدم الافتراضي لمدير ووردبريس
  • 2. التأكد من إدارة أدوار المستخدمين وصلاحياتهم في ووردبريس بشكل صحيح
  • 3. التأكد من تعطيل تسجيل المستخدمين
  • 4. التأكد من تعطيل محرر ملفات الإضافات
  • 5. التأكد من إلغاء تنشيط الإضافات غير المستخدمة وغير الضرورية
  • 6. التأكد من تكوين ووردبريس لاستخدام HTTPS فقط، بما في ذلك لوحة إدارة ووردبريس
  • 7. التأكد من تطبيق قيود الوصول IP (ACL)
    • 7.1. التأكد من تطبيق قيود الوصول IP على لوحة إدارة ووردبريس
    • 7.2. تقييد الوصول IP أو تعطيل ميزة JSON REST API
    • 7.3. تعطيل ميزة XML-RPC API
    • 7.4. تعطيل WP-Cron أو تقييد الميزة
  • 8. تكوين النظام لووردبريس آمن
    • 8.1. التأكد من استخدام إصدارات غير منتهية الدعم (EOL) لووردبريس و PHP
    • 8.2. التأكد من تمكين إضافات PHP الضرورية فقط لووردبريس
    • 8.3. التأكد من أمان الإضافات التي تحتوي على ميزات رفع الملفات
    • 8.4. التأكد من تكوين دوال وإعدادات PHP بشكل صحيح
    • 8.5. التأكد من تشغيل خادم الويب كمستخدم غير جذري - مستخدم ومجموعة فريدان وغير مميزان لتطبيق الخادم
    • 8.6. التأكد من تشغيل PHP-FPM كمستخدم غير جذري - مستخدم ومجموعة فريدان وغير مميزان لتطبيق الخادم
    • 8.7. التأكد من التكوين الآمن لدليل منزل ووردبريس
  • 9. التأكد من تحديثات أمان ووردبريس
  • 10. التأكد من إجراء فحوصات أمنية منتظمة للثغرات لووردبريس

1. التأكد من تغيير اسم المستخدم الافتراضي لمدير ووردبريس

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

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

التدقيق:

  • التحقق مما إذا كان اسم المستخدم الافتراضي لمدير ووردبريس لا يزال مضبوطًا على "admin".

المعالجة:

  • إذا كان اسم المستخدم هو "admin"، قم بتغييره فورًا إلى اسم مستخدم أقل قابلية للتخمين.
  1. سجل الدخول إلى لوحة تحكم ووردبريس باستخدام حساب المدير.
  2. انتقل إلى منطقة "المستخدمون" من لوحة التحكم، وانقر على "إضافة مستخدم جديد".
  3. املأ النموذج واختر "مدير" في القائمة المنسدلة "الدور" (تذكر استخدام كلمة مرور ويب قوية واستخدم أيضًا مؤشر قوة كلمة المرور المقدم لتأكيد أن كلمة المرور الجديدة قوية بما يكفي).
  4. عند الانتهاء، انقر على زر "إضافة مستخدم جديد".
  5. سجل الدخول مرة أخرى باستخدام اسم المستخدم الجديد للمدير في ووردبريس.
  6. انتقل مرة أخرى إلى منطقة "المستخدمون".
  7. في قائمة المستخدمين، حدد اسم المستخدم السابق "admin" واختر "حذف" من القائمة المنسدلة.
  8. عند حذف المدير القديم، سيُطلب منك بشأن المقالات المنشورة تحت اسم المستخدم السابق "admin".
    • اختر الخيار "إسناد جميع المنشورات والروابط إلى:" واختر المدير الجديد.
    • عند الانتهاء، انقر على "تأكيد الحذف".

ملاحظة:

  • استخدم دائمًا "اسم عرض" مختلفًا عن اسم المستخدم. إذا تم استخدام اسم المستخدم الفعلي كاسم عرض لمؤلف المحتوى، فسيتمكن المخترق من تحديد اسم المستخدم بسهولة ويستهدف الحساب.

2. التأكد من إدارة أدوار المستخدمين وصلاحياتهم في ووردبريس بشكل صحيح

بشكل افتراضي، يحتوي ووردبريس على خمسة أدوار للمستخدمين - "المديرون" و"المحررون" و"المؤلفون" و"المساهمون" و"المشتركون"

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

التدقيق:

  • التحقق من تعديل أدوار المستخدمين وصلاحياتهم في ووردبريس لتناسب احتياجات موقعك.
  • مراجعة جميع أدوار المستخدمين للتأكد من توافقها مع سياسات التشغيل الحالية لموقعك.

المعالجة:

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

ملاحظة:

  • في معظم الحالات، بالنسبة للمواقع الموجهة للخدمات مثل مدونات الشركات، وصفحات التوظيف، ومواقع العلامات التجارية، ومواقع الترويجية حيث يتفاعل المستخدمون بشكل ضئيل ويتم عرض المحتوى بشكل أساسي، تكون أدوار مثل "المديرون" و"المحررون" و"المؤلفون" كافية.

3. التأكد من تعطيل تسجيل المستخدمين

يتضمن ووردبريس ميزة تسجيل مستخدمين مدمجة. هذه الميزة معطلة افتراضيًا، ولكن يمكن تفعيلها بواسطة مدير.

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

التدقيق:

  • التحقق من تعطيل تسجيل المستخدمين. يمكنك التحقق من ذلك عن طريق محاولة الوصول إلى صفحة تسجيل المستخدمين.
  1. باستخدام متصفح ويب

    • اذهب إلى https://yourwordpress.com/wp-login.php?action=register
    • إذا كان تسجيل المستخدمين معطلاً، سترى "تسجيل المستخدم غير مسموح به حاليًا." 3.1!
  2. باستخدام curl

    • إذا كان تسجيل المستخدمين معطلاً، فسيتم إعادة التوجيه إلى صفحة معطلة.```

curl -i -k "https://yourwordpress.com/wp-login.php?action=register"

(response) HTTP/1.1 302 Moved Temporarily cache-control: no-cache, no-store, must-revalidate, max-age=0 content-type: text/html; charset=UTF-8 server: Apache content-length: 0 ... location: https://yourwordpress.com/wp-login.php?registration=disabled

root@kitploit:~
**الإصلاح:**
- إذا كان تسجيل المستخدمين مفعّلاً، فقم بتعطيله.
- قم بإلغاء تحديد "يمكن لأي شخص التسجيل"
![3.2!](https://assets.kitploit.com/production/public/readmes/6586/46991061b1bec392d06e00e986f048c6369b8db2c9e5a6b30f4f66dbc9b862d1.png)


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

الاختراقات الشائعة عبر هذه المحررات تشمل حقن SQL، واختراق SEO بالبريد العشوائي، واختراق SEO الياباني.

**التدقيق:**
- تحقق من تعطيل محرر الملفات. 
- تحقق مما إذا كان يمكنك الوصول إلى المحرر عبر المظهر > المحرر أو الإضافات > محرر الإضافات.

**الإصلاح:**
- إذا كان محرر الملفات مفعّلاً، فقم بتعطيله باتباع الخطوات التالية:

1. قم بالوصول إلى ملف wp-config.php الخاص بك باستخدام مدير الملفات أو FTP
2. افتح ملف wp-config.php للتحرير.
3. انتقل إلى أسفل الملف (إذا كنت تستخدم wp-config.php الافتراضي).
4. حدد موقع السطر التالي:
`
/* هذا كل شيء، توقف عن التحرير! كتابة سعيدة. */
`
5. فوق هذا السطر، أضف الكود التالي:
`
define('DISALLOW_FILE_EDIT', true);
`
6. احفظ التغييرات وأغلق المحرر.
7. عد إلى لوحة تحكم ووردبريس الخاصة بك وتأكد من أن خيارات المحرر لم تعد متاحة.


## 5. تأكد من تعطيل الإضافات غير المستخدمة وغير الضرورية
تنشأ العديد من الثغرات الأمنية في ووردبريس من مشاكل أمان الإضافات. 
الإضافات مفتوحة المصدر، مما يسهل على المهاجمين العثور على الثغرات واستغلالها. 
من الضروري الحفاظ على تحديث الإضافات التي تستخدمها وتعطيل أي إضافات غير مستخدمة لمنع الاستغلال المحتمل.

**التدقيق:**
- تحقق من تعطيل الإضافات غير المستخدمة وغير الضرورية. 
- تأكد من تعطيل الإضافات غير المستخدمة وغير الضرورية.

**الإصلاح:**
- قم بتعطيل أي إضافات غير مستخدمة وغير ضرورية باتباع الخطوات التالية:

**استخدام فحص الإضافات - PCP:**
- PCP: https://wordpress.org/plugins/plugin-check
1. قم بتثبيت وتفعيل فحص الإضافات (PCP):
   - اذهب إلى لوحة تحكم ووردبريس الخاصة بك
   - انتقل إلى الإضافات > إضافة جديد.
   - ابحث عن "Plugin Check" وقم بالتثبيت والتفعيل.

2. قم بتشغيل فحص الإضافات:
   - في لوحة تحكم ووردبريس، اذهب إلى قائمة فحص الإضافات.
   - حدد الإضافات التي تريد فحصها وقم بتشغيل المسح.

3. تحليل نتائج المسح:
   - سيقوم PCP بتحليل كود الإضافة وتقديم تقرير، بما في ذلك:
     - الامتثال لمعايير الكود: مدى التزام الإضافة بمعايير الترميز الخاصة بووردبريس.
     - المشاكل الأمنية: الثغرات المحتملة أو الكود الضار.
     - مشاكل الأداء: تأثير الإضافة على أداء الموقع.
     - مشاكل التوافق: ما إذا كانت الإضافة متوافقة مع الإضافات والقوالب الأخرى.

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

5. حل المشكلات:
   - قم بإصلاح المشكلات المحددة عن طريق التحديث أو العثور على المشكلات في صفحات الإضافات.
   - تجنب استخدام الإضافات ذات المشاكل الأمنية الشديدة. ابحث عن إضافات بديلة عند الضرورة.

**إدارة الإضافات:**
1. اختيار الإضافات:
   - استخدم المستودعات الرسمية، تحقق من التقييمات والمراجعات، تحقق من مصداقية المطور
   - لا تستخدم إضافات غير معروفة أو غير موثقة.

2. التحديثات المنتظمة
   - حافظ على تحديث الإضافات لضمان حصولك على أحدث التصحيحات الأمنية.

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


## 6. تأكد من تكوين ووردبريس لاستخدام HTTPS فقط، بما في ذلك لوحة تحكم ووردبريس
اليوم، تم تكوين معظم المواقع للعمل عبر SSL (HTTPS).
ومع ذلك، قد لا تزال بعض خوادم الويب مهيأة بشكل خاطئ للتعامل مع اتصالات HTTP و HTTPS معًا.
وهذا يمكن أن يسمح بالوصول إلى ووردبريس عبر كلا البروتوكولين، مما يشكل خطرًا أمنيًا. يجب إجبار ووردبريس، بما في ذلك لوحة تحكم ووردبريس، على استخدام HTTPS حصريًا.

**التدقيق:**
- تحقق من تكوين ووردبريس، بما في ذلك لوحة التحكم، ليكون قابلاً للوصول فقط عبر HTTPS.
- تحقق من تكوين VirtualHost لخادم الويب للتأكد من عدم وجود أي VirtualHosts لبروتوكول HTTP.

**الإصلاح:**
- إذا كان الوصول عبر HTTP ممكنًا، فقم أولاً بمراجعة وتعديل إعدادات خادم الويب.
- إذا كان الخادم يحتوي على VirtualHosts لـ HTTP، فقم إما بإعادة توجيهها إلى HTTPS أو حذف VirtualHosts الخاصة بـ HTTP.
- إذا لزم الأمر، قم بتمكين ميزة "FORCE_SSL_ADMIN" لفرض الوصول عبر HTTPS للوحة تحكم ووردبريس.

**خطوات تمكين FORCE_SSL_ADMIN:**
1. قم بالوصول إلى ملف wp-config.php الخاص بك باستخدام مدير الملفات أو FTP.
2. افتح ملف wp-config.php للتحرير.
3. انتقل إلى أسفل الملف (إذا كنت تستخدم wp-config.php الافتراضي).
4. حدد موقع السطر التالي:
`
/* هذا كل شيء، توقف عن التحرير! كتابة سعيدة. */
`
5. فوق هذا السطر، أضف الكود التالي:
`
define('FORCE_SSL_ADMIN', true);`
`
6. احفظ التغييرات وأغلق المحرر.
عد إلى لوحة تحكم ووردبريس الخاصة بك وقم بتسجيل الدخول مرة أخرى للتأكد من أن لوحة التحكم يمكن الوصول إليها فقط عبر HTTPS.

**إعادة توجيه HTTP إلى HTTPS على خادم الويب:**
1. لأباتشي:
    ```
    <VirtualHost *:80>
        ServerName yourwordpress.com
    
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </VirtualHost>
    ```
2. لـ Nginx:
    ```
    server {
        listen 80;
        server_name yourwordpress.com;
    
        location / {
            return 301 https://$host$request_uri;
        }
    }
    ```
من خلال ضمان أن ووردبريس ولوحة التحكم يمكن الوصول إليها فقط عبر HTTPS، يمكنك تعزيز أمان موقعك بشكل كبير، وحماية البيانات ومنع الوصول غير المصرح به.

## 7. تأكد من تطبيق قيود الوصول حسب عنوان IP (ACL)
تحقق من تطبيق قيود الوصول حسب عنوان IP

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

تشمل عناوين URL التي يجب تأمينها: لوحة تحكم ووردبريس، تسجيل المستخدمين (wp-signup.php)، واجهة برمجة تطبيقات JSON REST، وميزة XML-RPC.

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

من خلال تطبيق قيود الوصول حسب عنوان IP، يمكنك تقليل مخاطر الوصول غير المصرح به بشكل كبير وتعزيز الأمان العام لموقعك.


### 7.1. تأكد من تطبيق قيود الوصول حسب عنوان IP على لوحة تحكم ووردبريس.
مسار الوصول إلى لوحة تحكم ووردبريس ثابت في شكل wp-login.php أو /wp-admin، مما يجعله سهل الوصول للمستخدمين غير المصرح لهم.
تأكد من تطبيق قيود الوصول حسب عنوان IP لمنع الوصول غير المصرح به إلى صفحة الإدارة.

**التدقيق:**
- تحقق من تطبيق قيود الوصول حسب عنوان IP للوحة تحكم ووردبريس.
- في معظم الحالات، يتم تكوين ذلك على خادم الويب (Apache, Nginx).

**الإصلاح:**
- إذا لم يتم تطبيق قيود الوصول حسب عنوان IP، فقم بتطبيقها.
- فيما يلي طرق تطبيق قيود الوصول حسب عنوان IP باستخدام خوادم الويب Apache و Nginx.

**تطبيق قيود الوصول حسب عنوان IP على لوحة تحكم ووردبريس:**
- /wp-admin, wp-login.php

1. لأباتشي:
    ```
   # توجيه الملفات
    <Files "wp-login.php">
        Require ip 10.10.77.49  # استبدل بعنوان IP الخاص بك
    </Files>
    
    # توجيه FilesMatch
    <FilesMatch "^wp-login\.php$">
        Require all granted
    </FilesMatch>

   # توجيه مزيج من الدليل والملفات
    <Directory /www/vhosts/yourwordpress>
        Require all granted
        AllowOverride None
        <Files "wp-login.php">
            Require ip 10.10.77.49  # استبدل بعنوان IP الخاص بك
        </Files>
    </Directory>
   
   # توجيه الموقع
    <Location "/wp-admin">
        Require ip 10.10.77.49  # استبدل بعنوان IP الخاص بك
    </Location>
    
    <Location "/wp-login.php">
        Require ip 10.10.77.49  # استبدل بعنوان IP الخاص بك
    </Location>
    ```
2. لـ Nginx:
    ```
    location /wp-admin {
        allow 10.10.77.49;  # استبدل بعنوان IP الخاص بك
        deny all;
    }
    
    location ~* \wp-login.php {
        allow 10.10.77.49;  # استبدل بعنوان IP الخاص بك
        deny all;
    }
    ```


### 7.2. تقييد الوصول حسب عنوان IP أو تعطيل ميزة واجهة برمجة تطبيقات JSON REST
يوفر ووردبريس وظيفتين لـ REST (xmlrpc, json rest api) ويتم تمكينهما افتراضيًا عند تثبيت ووردبريس.
توفر واجهة برمجة تطبيقات REST نقاط نهاية لأنواع بيانات ووردبريس، مما يسمح بالتفاعل عن بعد مع الموقع لمهام مثل الاستعلام عن المنشورات أو البيانات، وتعديل الموارد، والتحرير، والحذف.

بالنسبة لمعظم مواقع ووردبريس، ميزة واجهة برمجة تطبيقات REST ليست ضرورية.
قد يؤدي تمكينها إلى تعريض ووردبريس لهجمات DDoS ويمكن أن يؤدي إلى استهلاك الموارد وإبطاء الموقع.

**التدقيق:**
- تحقق من تمكين ميزة واجهة برمجة تطبيقات JSON REST. (الافتراضي: ممكّن)```
# curl -i -k https://yourwordpress.com/wp-json

(response)
HTTP/1.1 200 OK
cache-control: no-cache, no-store, must-revalidate, max-age=0
content-type: text/html; charset=UTF-8
...
Server: Apache

{"name":"mywordress","description":"".......................

المعالجة:

  • إذا كانت REST API غير ضرورية، فقم بتعطيلها. يمكن تعطيلها من خلال تثبيت إضافة بسيطة.
  • إذا كنت تستخدم REST API، قم بتطبيق قيود الوصول عبر IP للسماح بالوصول فقط من عناوين IP المسموح بها.

تثبيت إضافة "تعطيل REST API" وتفعيلها:

  1. انتقل إلى لوحة تحكم ووردبريس الخاصة بك
  2. انتقل إلى الإضافات > إضافة جديد.
  3. ابحث عن "تعطيل REST API" وقم بتثبيتها وتفعيلها.
  4. بمجرد التفعيل، يجب أن تقوم الإضافة بتعطيل وظيفة REST API تلقائيًا على موقع ووردبريس الخاص بك.

تقييد الوصول عبر IP لواجهة JSON REST API:

  1. لـ Apache:
    root@kitploit:~
    <Location "/wp-json">
        Require ip 10.10.77.49  # Replace with your IP address
    </Location>
    
  2. لـ Nginx:
    root@kitploit:~
    location ~ ^/wp-json/ {
        allow 10.10.77.49;   # Replace with your allowed IP address
        deny all;
    }
    

7.3. تعطيل ميزة XML-RPC API

على غرار JSON REST API، يُنصح بتعطيل XML-RPC API لأنه غير مطلوب لمعظم تثبيتات ووردبريس.

إذا كانت REST API مطلوبة، فمن المستحسن استخدام JSON REST API بدلاً من ذلك.

لدى XML-RPC نقطتا ضعف رئيسيتان:

هجمات القوة الغاشمة:

  • يحاول المهاجمون تسجيل الدخول إلى ووردبريس باستخدام xmlrpc.php باستخدام أكبر عدد ممكن من مجموعات اسم المستخدم/كلمة المرور التي يمكنهم إدخالها.
  • تسمح طريقة داخل xmlrpc.php للمهاجم باستخدام أمر واحد (system.multicall) لتخمين مئات كلمات المرور.

هجمات حجب الخدمة عبر Pingback:

  • في عام 2013، أرسل المهاجمون طلبات Pingback عبر xmlrpc.php لحوالي 2500 موقع ووردبريس.
  • يمنح هذا أي مهاجم مجموعة غير محدودة تقريبًا من عناوين IP لتوزيع هجوم حجب الخدمة عبر شبكة تضم أكثر من 100 مليون موقع ووردبريس، دون الحاجة إلى اختراقها.

إذا تم تمكين XML-RPC، فلا يزال من الممكن استغلاله لمثل هذه الهجمات.

التدقيق:

  • تحقق من أن ميزة XML-RPC API ممكّنة. (الافتراضي: ممكّن)```

curl -i -k https://yourwordpress.com/xmlrpc.php

(response) HTTP/1.1 405 Method Not Allowed Date: Mon, 25 Jun 2018 08:30:24 GMT Server: Apache Allow: POST Content-Length: 42 Content-Type: text/plain; charset=UTF-8

XML-RPC server accepts POST requests only.

root@kitploit:~
**الإصلاح:**
- تعطيل ميزة XML-RPC باستخدام إضافة

**تثبيت إضافة "Disable XML-RPC-API"، تفعيلها:**
1. اذهب إلى لوحة تحكم ووردبريس الخاصة بك
2. انتقل إلى الإضافات > إضافة جديد.
3. ابحث عن "[Disable XML-RPC-API](https://wordpress.org/plugins/disable-xml-rpc-api/)" وقم بتثبيتها وتفعيلها.
4. تم الآن تعطيل XML-RPC-API.

**حول هجمات pingback عبر XML-RPC:**

1. تأكد من تمكين XML-RPC
    ```
    # curl -i -k https://yourwordpress.com/xmlrpc.php
    
    (response)
    HTTP/1.1 405 Method Not Allowed
    Date: Mon, 25 Jun 2018 08:30:24 GMT
    Server: Apache
    Allow: POST
    Content-Length: 42
    Content-Type: text/plain; charset=UTF-8
     
     
    XML-RPC server accepts POST requests only.
    ```
2. البحث عن طرق XML-RPC المتاحة
    ```
    (request)
    POST /xmlrpc.php HTTP/1.1
    Host: yourwordpress.com
    Content-Length: 135
    
    <?xml version="1.0" encoding="utf-8"?>
    <methodCall>
        <methodName>system.listMethods</methodName>
        <params></params>
    </methodCall>
    
    
    (response)
    HTTP/1.1 200 OK
    cache-control: no-cache, no-store, must-revalidate, max-age=0
    ...
    Server: Apache
    Content-Length: 4272
    Content-Type: text/xml; charset=UTF-8
    
    <?xml version="1.0" encoding="UTF-8"?>
    <methodResponse>
        <params>
            <param>
                <value>
                    <array><data>
                        <value><string>system.multicall</string></value>
                        <value><string>system.listMethods</string></value>
                        <value><string>system.getCapabilities</string></value>
                        <value><string>demo.addTwoNumbers</string></value>
                        <value><string>demo.sayHello</string></value>
                        <value><string>pingback.extensions.getPingbacks</string></value>
                        <value><string>pingback.ping</string></value>
                        <value><string>mt.publishPost</string></value>
                        ...
                        <value><string>wp.getUsersBlogs</string></value>
                    </data></array>
                </value>
            </param>
        </params>
    </methodResponse>
    
    ```
3. تنفيذ pingbacks
    - لم يتم وصف نجاح هجوم pingback وطرق التحقق المحددة.
    ```
    (request)
    POST /xmlrpc.php HTTP/1.1
    Host: yourwordpress.com
    Content-Length: 303
    
    <?xml version="1.0" encoding="UTF-8"?>
        <methodCall>
        <methodName>pingback.ping</methodName>
            <params>
                <param>
                    <value><string>call-back url for pingback result</string></value>
                </param>
                <param>
                    <value><string>https://yourwordpress.com/</string></value>
            </param>
        </params>
    </methodCall>
    
    
    (response)
    HTTP/1.1 200 OK
    ...
    Server: Apache
    Content-Length: 370
    Content-Type: text/xml; charset=UTF-8
    
    <?xml version="1.0" encoding="UTF-8"?>
    <methodResponse>
      <fault>
        <value>
          <struct>
            <member>
              <name>faultCode</name>
              <value><int>0</int></value>
            </member>
            <member>
              <name>faultString</name>
              <value><string></string></value>
            </member>
          </struct>
        </value>
      </fault>
    </methodResponse>
    ```


### 7.4. تعطيل WP-Cron أو تقييد الميزة
في ووردبريس، يتم استخدام WP-Cron (wp-cron.php) لأتمتة المهام مثل جدولة نشر المقالات، والتحقق من تحديثات الإضافات/القوالب، وإرسال رسائل البريد الإلكتروني للإشعارات.

يعمل WP-Cron بشكل أساسي عن طريق التحقق من قائمة المهام المجدولة في كل مرة يتم فيها تحميل صفحة.
تنشأ المشكلة عندما يكون هناك تحميل ثقيل للصفحات.

نظرًا لأن مهام WP-Cron تُنفذ مع كل تحميل صفحة، فإن الوصول المتكرر المتعدد يؤدي إلى استدعاءات WP-Cron المقابلة. وبالتالي، قد تصبح موارد النظام شحيحة، مما يتسبب في تباطؤ الموقع أو حتى توقفه.
هذا أمر حقيقي وغالبًا ما يتم استغلاله في هجمات الثغرات التي تستهدف ووردبريس.

إذا لم يكن WP-Cron ضروريًا، فمن المستحسن تعطيله.
إذا كان ضروريًا، قم بتقييد الوصول إلى المضيفين المحليين فقط.


**التدقيق:**
- تأكد من تمكين WP-Cron. (الافتراضي: ممكّن)```
# curl -i -k https://yourwordpress.com/wp-cron.php

(response)
HTTP/1.1 200 ok
Date: Mon, 25 Jun 2018 08:30:24 GMT
Server: Apache
Allow: POST
Content-Length: 42
Content-Type: text/plain; charset=UTF-8

المعالجة:

  • قم بتعطيل WP-Cron إذا لم يكن قيد الاستخدام.
  • إذا كان قيد الاستخدام، قم بتطبيق أحد الخيارات التالية بشكل مناسب:
    1. قم بتفعيل 'ALTERNATE_WP_CRON' وتقييد الوصول بواسطة IP على wp-cron.php.
    2. استخدم cron النظام (crontab) أو طرق بديلة أخرى لتنفيذ مهام cron.

خطوات تعطيل WP-Cron:

  1. قم بالوصول إلى ملف wp-config.php الخاص بك باستخدام File Manager أو FTP.
  2. افتح ملف wp-config.php للتحرير.
  3. قم بالتمرير لأسفل إلى نهاية الملف (إذا كنت تستخدم ملف wp-config.php الافتراضي).
  4. ابحث عن السطر التالي: /* That’s all, stop editing! Happy publishing. */
  5. فوق هذا السطر، أضف الكود التالي: define('DISABLE_WP_CRON', true);
  6. احفظ التغييرات وأغلق المحرر.
  7. قم بتطبيق قيود الوصول بواسطة IP باستخدام خوادم الويب Apache و Nginx.
    1. لأباتشي:
      root@kitploit:~
      # Files Directive 
      <Files "wp-cron.php">
          Require ip 127.0.0.1  # localhost only
      </Files>
      
      # FilesMatch Directive
      <FilesMatch "^wp-cron\.php$">
          Require ip 127.0.0.1  # localhost only
      </FilesMatch>
      
      # Location Directive
      <Location "/wp-cron.php">
          Require ip 127.0.0.1  # localhost only
      </Location>
      
    2. لـ Nginx:
      root@kitploit:~
       location = /wp-cron.php {
           allow 127.0.0.1;
           deny all;
           access_log off;
           log_not_found off;
       }
      

خطوات تفعيل 'ALTERNATE_WP_CRON':

  1. قم بالوصول إلى ملف wp-config.php الخاص بك باستخدام File Manager أو FTP.
  2. افتح ملف wp-config.php للتحرير.
  3. قم بالتمرير لأسفل إلى نهاية الملف (إذا كنت تستخدم ملف wp-config.php الافتراضي).
  4. ابحث عن السطر التالي: /* That’s all, stop editing! Happy publishing. */
  5. فوق هذا السطر، أضف الكود التالي: define( 'ALTERNATE_WP_CRON', true );
  6. احفظ التغييرات وأغلق المحرر.
  7. قم بتطبيق قيود الوصول بواسطة IP باستخدام خوادم الويب Apache و Nginx.
    1. لأباتشي:
      root@kitploit:~
      # Files Directive 
      <Files "wp-cron.php">
          Require ip 127.0.0.1  # localhost only
      </Files>
      
      # FilesMatch Directive
      <FilesMatch "^wp-cron\.php$">
          Require ip 127.0.0.1  # localhost only
      </FilesMatch>
      
      # Location Directive
      <Location "/wp-cron.php">
          Require ip 127.0.0.1  # localhost only
      </Location>
      
    2. لـ Nginx:
      root@kitploit:~
       location = /wp-cron.php {
           allow 127.0.0.1;
           deny all;
           access_log off;
           log_not_found off;
       }
      

مثال: استخدام Cron النظام (crontab):

  • قبل التطبيق، قم بتعطيل WP-Cron أولاً.```

vim /etc/crontab

.. ... */10 * * * * curl http://yourwordpress.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

*/10 * * * * cd /var/www/yourwordpress.com/htdocs; php /var/www/yourwordpress.com/htdocs/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Also can use WP-Cli

*/10 * * * * cd /var/www/example.com/htdocs; wp cron event run --due-now > /dev/null 2>&1

root@kitploit:~
**حول تنفيذ هجوم رفض الخدمة (DoS) باستخدام wp-cron.php:**
- إرسال حجم كبير من الطلبات إلى ملف wp-cron.php
- يؤدي ذلك إلى استهلاك البرنامج النصي لكمية هائلة من الموارد، مما يؤدي في النهاية إلى تحميل الخادم فوق طاقته
![7.4.1!](https://assets.kitploit.com/production/public/readmes/6586/b1647fd6883b8d7b3178e7f042290fada6614e9de11a4e6e256f435902b12633.png)
![7.4.2!](https://assets.kitploit.com/production/public/readmes/6586/07d6a5d1794a3ba03177b78f63631eb5fb8f8f6092d6156965535847636d2769.png)

## 8. تكوين النظام لـ WordPress آمن.
لضمان التشغيل الآمن لـ WordPress، يلزم وجود تكوين مناسب لخادم الويب وتقوية مكونات الواجهة الخلفية.
فيما يلي العديد من العناصر الأساسية التي يجب التحقق منها وتنفيذها.

### 8.1. التأكد من استخدام إصدارات WordPress وPHP غير المنتهية (غير EOL)
للحفاظ على تثبيت آمن لـ WordPress، من الضروري استخدام إصدارات من WordPress وPHP ليست في نهاية عمرها الافتراضي (EOL). الإصدارات المنتهية لم تعد مدعومة ولا تتلقى تحديثات أمنية، مما يترك موقعك الإلكتروني عرضة للمشكلات الأمنية غير المصححة.

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

**التدقيق:**
- تحقق من أن إصدارات WordPress وPHP الحالية لديك ليست منتهية (EOL).

**المعالجة:**
- قم بتثبيت وتشغيل إصدارات غير منتهية من WordPress وPHP.
- اعتبارًا من مايو 2024، إصدار WordPress المدعوم هو 6.5 وما فوق. إصدارات PHP المدعومة هي 8.1 و8.2 و8.3.
- إذا كنت تستخدم خدمة استضافة ويب، فاستفد من ميزات تبديل الإصدارات الخاصة بها لضمان تشغيل إصدارات مدعومة من كل من WordPress وPHP.

**حالة نهاية العمر (EOL) اعتبارًا من مايو 2024**
 1. PHP: [supported-versions](https://www.php.net/supported-versions.php)
    - الإصدارات المدعومة حاليًا: 8.1 و8.2 و8.3
 2. WordPress: [current-releases](https://wordpress.org/download/releases/)
    - الإصدارات المدعومة حاليًا: سلسلة 6.5

**مثال: PHP في RockyLinux 8.5**
- في RockyLinux 8.5، إصدارات PHP الافتراضية المتاحة هي 7.2 و7.3 و7.4.
    ```
    # dnf module list php
    Rocky Linux 8 - AppStream
    Name         Stream          Profiles                           Summary                       
    php          7.2 [d]         common [d], devel, minimal         PHP scripting language        
    php          7.3             common [d], devel, minimal         PHP scripting language        
    php          7.4             common [d], devel, minimal         PHP scripting language        
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
    
    # dnf module enable php:7.4
    ==============================================================================================
     Package               Architecture         Version               Repository             Size
    ==============================================================================================
    Enabling module streams:
     httpd                                      2.4                                              
     php                                        7.4                                              
    
    Transaction Summary
    ==============================================================================================
    
    Is this ok [y/N]: y
    Complete!
    ```
- لقد وصل PHP 7 بالفعل إلى نهاية عمره الافتراضي (EOL)؛ يُوصى بالترقية إلى PHP 8.
- يمكن تثبيت PHP 8 من مستودع REMI.
- فيما يلي مثال لكيفية تمكين وتثبيت PHP 8.2 باستخدام REMI:
    ```
    # Install PHP 8.2 in Rocky Linux 8
    
    # dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    # dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
    # dnf -y install yum-utils
    # dnf module reset php
    # dnf module install php:remi-8.2
    Last metadata expiration check: 0:00:39 ago on Tue 13 Dec 2022 07:19:26 AM UTC.
    Dependencies resolved.
    =======================================================================================================================================
     Package                       Architecture        Version                                             Repository                 Size
    =======================================================================================================================================
    Installing group/module packages:
     php-cli                       x86_64              8.2.0-1.el8.remi                                    remi-modular              5.4 M
     php-common                    x86_64              8.2.0-1.el8.remi                                    remi-modular              1.3 M
     php-fpm                       x86_64              8.2.0-1.el8.remi                                    remi-modular              1.9 M
     php-mbstring                  x86_64              8.2.0-1.el8.remi                                    remi-modular              574 k
     php-xml                       x86_64              8.2.0-1.el8.remi                                    remi-modular              254 k
    Installing dependencies:
     httpd-filesystem              noarch              2.4.37-51.module+el8.7.0+1059+126e9251              appstream                  41 k
     libxslt                       x86_64              1.1.32-6.el8                                        baseos                    249 k
     oniguruma5php                 x86_64              6.9.8-1.el8.remi                                    remi-safe                 212 k
    Installing weak dependencies:
     nginx-filesystem              noarch              1:1.14.1-9.module+el8.4.0+542+81547229              appstream                  23 k
    Installing module profiles:
     php/common
    Enabling module streams:
     httpd                                             2.4
     nginx                                             1.14
     php                                               remi-8.2
    
    Transaction Summary
    =======================================================================================================================================
    Install  9 Packages
    
    # dnf update
    # dnf install php
    Last metadata expiration check: 0:00:23 ago on Tue 13 Dec 2022 07:29:55 AM UTC.
    Dependencies resolved.
    =======================================================================================================================================
     Package                       Architecture       Version                                               Repository                Size
    =======================================================================================================================================
    Installing:
     php                           x86_64             8.2.0-1.el8.remi                                      remi-modular             1.8 M
    Installing dependencies:
     apr                           x86_64             1.6.3-12.el8                                          appstream                128 k
     apr-util                      x86_64             1.6.1-6.el8.1                                         appstream                104 k
     httpd                         x86_64             2.4.37-51.module+el8.7.0+1059+126e9251                appstream                1.4 M
     httpd-tools                   x86_64             2.4.37-51.module+el8.7.0+1059+126e9251                appstream                108 k
     libsodium                     x86_64             1.0.18-2.el8                                          epel                     162 k
     mailcap                       noarch             2.1.48-3.el8                                          baseos                    38 k
     mod_http2                     x86_64             1.15.7-5.module+el8.6.0+823+f143cee1                  appstream                153 k
     rocky-logos-httpd             noarch             86.3-1.el8                                            baseos                    24 k
    Installing weak dependencies:
     apr-util-bdb                  x86_64             1.6.1-6.el8.1                                         appstream                 23 k
     apr-util-openssl              x86_64             1.6.1-6.el8.1                                         appstream                 26 k
     php-opcache                   x86_64             8.2.0-1.el8.remi                                      remi-modular             633 k
     php-pdo                       x86_64             8.2.0-1.el8.remi                                      remi-modular             166 k
     php-sodium                    x86_64             8.2.0-1.el8.remi                                      remi-modular             105 k
    
    Transaction Summary
    =======================================================================================================================================
    Install  14 Packages
    
    Total download size: 4.8 M
    Installed size: 14 M
    Is this ok [y/N]: y
    
    # php -v
    PHP 8.2.0 (cli) (built: Dec  6 2022 14:26:47) (NTS gcc x86_64)
    Copyright (c) The PHP Group
    Zend Engine v4.2.0, Copyright (c) Zend Technologies
        with Zend OPcache v8.2.0, Copyright (c), by Zend Technologies
    ```
**ملاحظة:**
- للحصول على تعليمات مفصلة حول تثبيت PHP من مستودع REMI: [rpms.remirepo.net](https://rpms.remirepo.net/)
- وثائق حول توافق WordPress وPHP: [php-compatibility-and-wordpress-versions](https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/)

### 8.2. التأكد من تمكين إضافات PHP الضرورية فقط لـ WordPress
تأكد من تمكين إضافات PHP الضرورية فقط لموقع WordPress الخاص بك. يمكن للإضافات غير الضرورية أن تزيد من سطح الهجوم لموقعك وقد تعرض WordPress لثغرات أمنية. بتمكين الإضافات المطلوبة فقط، يمكنك تقليل المخاطر المحتملة وتحسين الأمان العام.

فيما يلي الإضافات المطلوبة لكي يعمل موقع WordPress بشكل صحيح. **(ليست قائمة لأغراض تقوية الأمان)**

| الإضافة      | الوصف                                                                                                                                                                                                                                           |
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| json         | تُستخدم للاتصالات مع الخوادم الأخرى ومعالجة البيانات بتنسيق JSON.                                                                                                                                                                               |
| mysqli       | يتصل بـ MySQL للتفاعل مع قاعدة البيانات.                                                                                                                                                                                                        |
| curl         | ينفذ عمليات الطلب عن بُعد.                                                                                                                                                                                                                      |
| dom          | يُستخدم للتحقق من صحة محتوى أداة النص وتهيئة IIS7+ تلقائيًا.                                                                                                                                                                                    |
| exif         | يعمل مع البيانات الوصفية المخزنة في الصور.                                                                                                                                                                                                      |
| fileinfo     | يُستخدم لاكتشاف نوع MIME لرفع الملفات.                                                                                                                                                                                                          |
| hash         | يُستخدم للتجزئة (hashing)، بما في ذلك كلمات المرور وحزم التحديث.                                                                                                                                                                                |
| igbinary     | يحسن الأداء كبديل مباشر للمُسلسل (serializer) القياسي في PHP.                                                                                                                                                                                   |
| imagick      | يوفر جودة صورة أفضل لرفع الوسائط. راجع WP_Image_Editor للتفاصيل. تغيير حجم الصور بشكل أذكى (للحصول على صور أصغر) ودعم مصغرات PDF، عند توفر Ghost Script أيضًا.                                                                                    |
| intl         | يمكّن العمليات الحساسة للموقع بما في ذلك على سبيل المثال لا الحصر: التنسيق، التحويل الصوتي (transliteration)، تحويل الترميز، عمليات التقويم، الترتيب المطابق (collation)، تحديد حدود النص، والعمل مع معرفات الموقع، المناطق الزمنية، والرموز الرسومية. |
| mbstring     | يُستخدم للتعامل السليم مع نص UTF8.                                                                                                                                                                                                              |
| openssl      | اتصالات SSL بالمضيفين الآخرين.                                                                                                                                                                                                                  |
| pcre         | يحسن أداء مطابقة الأنماط في عمليات البحث عن الكود.                                                                                                                                                                                              |
| xml          | يُستخدم لتحليل XML، مثل من موقع طرف ثالث.                                                                                                                                                                                                       |
| zip          | يُستخدم لفك ضغط الإضافات والقوالب وحزم تحديث WordPress.                                                                                                                                                                                         |
| bc           | للعمليات الحسابية الرياضية ذات الدقة التعسفية، والتي تدعم الأرقام من أي حجم ودقة تصل إلى 2147483647 رقمًا عشريًا.                                                                                                                                |
| filter       | يُستخدم لتصفية إدخال المستخدم بشكل آمن.                                                                                                                                                                                                         |
| image        | إذا لم يكن Imagick مثبتًا، يتم استخدام مكتبة GD للرسومات كبديل محدود الوظائف لمعالجة الصور.                                                                                                                                                     |
| iconv        | يُستخدم للتحويل بين مجموعات الأحرف.                                                                                                                                                                                                             |
| shmop        | Shmop مجموعة سهلة الاستخدام من الدوال التي تسمح لـ PHP بقراءة وكتابة وإنشاء وحذف مقاطع الذاكرة المشتركة في Unix.                                                                                                                               |
| simplexml    | يُستخدم لتحليل XML.                                                                                                                                                                                                                             |
| sodium       | يتحقق من صحة التوقيعات ويوفر وحدات بايت عشوائية آمنة.                                                                                                                                                                                          |
| xmlreader    | يُستخدم لتحليل XML.                                                                                                                                                                                                                             |
| zlib         | ضغط وفك ضغط Gzip.                                                                                                                                                                                                                               |

يمكن العثور على الإضافات الأساسية هنا: [WordPress Hosting Handbook: PHP Extensions](https://make.wordpress.org/hosting/handbook/server-environment/#php-extensions)

**التدقيق:**
- تحقق من تمكين إضافات PHP الضرورية فقط لموقع WordPress الخاص بك.

**المعالجة:**
- قم بإزالة أي إضافات غير ضرورية. في بعض الأحيان، يتم تثبيت الإضافات مع القوالب أو الإضافات الأخرى، وقد لا تكون مطلوبة لموقعك.
- للتحقق من إضافات PHP المُمكّنة حاليًا، يمكنك مراجعة ملف **php.ini** أو استخدام دالة **phpinfo()** لعرض جميع الإضافات النشطة.

![8.2!](https://assets.kitploit.com/production/public/readmes/6586/1e270a242227b8dc8fa965765c69b7927b170de108acdbe1fad91455e484e615.png)

- بعض الإضافات، إذا لم تكن ضرورية، يجب تعطيلها لمنع المشكلات الأمنية المحتملة.
- على سبيل المثال، الإضافات مثل exif وfileinfo وimap وsoap وpdo_sqlite وopcache يمكن استغلالها إذا بقيت مفعلة دون استخدام مناسب.
- إذا كنت تستخدم خدمة استضافة ويب، فإن العديد من المزودين يقدمون واجهات سهلة لتبديل إعدادات PHP، بما في ذلك تمكين أو تعطيل إضافات PHP. باستخدام هذه الميزات، يمكنك إدارة الإضافات بفعالية.

### 8.3. تأمين الإضافات التي تحتوي على ميزات رفع الملفات
يمكن أن تشكل الإضافات التي تحتوي على قدرات رفع الملفات خطرًا أمنيًا كبيرًا إذا لم يتم تأمينها بشكل صحيح. يمكن للثغرات الأمنية في وظائف رفع الملفات أن تسمح للمهاجمين برفع أغلفة الويب (web shells)، مما قد يؤدي إلى اختراق كامل للنظام. لذلك، من الضروري التأكد من أن أي وظيفة لرفع الملفات تتضمن آليات التحقق والتنظيف.

لماذا هذا مهم؟
1. التحقق من الامتداد:
   - يجب على الخادم التحقق من امتدادات الملفات مقابل قائمة بيضاء للأنواع المسموح بها لمنع رفع الملفات الضارة.

2. فحص نوع MIME:
   - يجب فحص نوع MIME للملف للتأكد من مطابقته للنوع المتوقع، مما يضيف طبقة أمان إضافية.

3. تقييد مسار الرفع:
   - التأكد من عدم وجود مسارات مكشوفة تسمح بالوصول المباشر إلى الملفات المرفوعة دون تحقق.

تعتبر ثغرات رفع الملفات خطيرة بشكل خاص لأنها توفر مسارًا مباشرًا للمهاجمين لرفع كود قابل للتنفيذ وتشغيل أوامر عشوائية. غالبًا ما تكون ثغرات رفع الملفات أسهل في التحديد والاستغلال مقارنة بثغرات أمنية أخرى مثل حقن SQL.

**التدقيق:**
- تحديد الإضافات التي تحتوي على وظيفة رفع الملفات على موقع WordPress الخاص بك.
- التحقق من أن هذه الإضافات تنفذ عمليات التحقق المناسبة للملفات المرفوعة، بما في ذلك التحقق من الامتداد ونوع MIME.

**المعالجة:**
- إذا كانت إضافة تحتوي على وظيفة رفع ملفات تفتقر إلى التحقق المناسب، فإما تعزيز أمانها أو إزالة الإضافة.
- فيما يلي أمثلة على إضافات WordPress الشائعة التي تحتوي على ميزات رفع الملفات وكيفية تعاملها مع التحقق من الملفات.

**مثال: إضافات WordPress الشائعة مع معالجة رفع الملفات**

1. Contact Form 7
   - Contact Form 7 هي واحدة من أكثر إضافات النماذج استخدامًا في WordPress. تتضمن وظيفة رفع ملفات أساسية مع التحقق من الامتداد ونوع MIME.**كود التحقق من الامتدادات المسموح بها ونوع MIME:**
     ```
      function wpcf7_allowed_file_extensions() {
          // Default allowed file extensions
          $allowed_file_extensions = array(
              'jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx',
              'xls', 'xlsx', 'txt', 'csv', 'rtf', 'html', 'zip'
          );
          return $allowed_file_extensions;
      }
    
      function wpcf7_handle_upload( $file ) {
          $allowed_mime_types = wpcf7_allowed_file_extensions();
          $file_type = wp_check_filetype( $file['name'] );
    
          // Check if the file type is allowed
          if ( ! in_array( $file_type['ext'], $allowed_mime_types ) ) {
              return new WP_Error( 'wpcf7_upload_failed', __( 'File type is not allowed.', 'contact-form-7' ) );
          }
    
          // Handle the file upload
          $upload = wp_handle_upload( $file, array( 'test_form' => false ) );
    
          // Check if the upload was successful
          if ( isset( $upload['error'] ) ) {
              return new WP_Error( 'wpcf7_upload_failed', $upload['error'] );
          }
    
          return $upload;
      }
      ```
      في Contact Form 7، تقوم دالة `wpcf7_allowed_file_extensions()` بإرجاع قائمة بامتدادات الملفات المسموح بها،
     وتقوم دالة `wpcf7_handle_upload()` بالتحقق مما إذا كان امتداد الملف موجودًا في هذه القائمة قبل متابعة التحميل.

2. WPForms
   - يتعامل WPForms مع تحميل الملفات عن طريق التحقق من أنواع الملفات المسموح بها.

      **مثال كود لـ WPForms:**
       ```
         function wpforms_get_file_types() {
          // Return an array of allowed file types
          return array( 'jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx' );
      }
    
      function wpforms_process_file_upload( $file ) {
          $allowed_file_types = wpforms_get_file_types();
          $file_type = wp_check_filetype( $file['name'] );
    
          if ( ! in_array( $file_type['ext'], $allowed_file_types ) ) {
              return new WP_Error( 'wpforms_upload_failed', __( 'File type is not allowed.', 'wpforms' ) );
          }
    
          $upload = wp_handle_upload( $file, array( 'test_form' => false ) );
    
          if ( isset( $upload['error'] ) ) {
              return new WP_Error( 'wpforms_upload_failed', $upload['error'] );
          }
    
          return $upload;
      }
      ```

3. WooCommerce
   - يقوم WooCommerce أيضًا بتعريف والتحقق من الامتدادات المسموح بها مباشرة في كود معالجة التحميل الخاص به.
   
       **مثال كود لـ WooCommerce:**
        ```
        function woocommerce_handle_upload( $file ) {
            $allowed_file_types = array( 'jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx' );
            $file_type = wp_check_filetype( $file['name'] );
        
            if ( ! in_array( $file_type['ext'], $allowed_file_types ) ) {
                return new WP_Error( 'woocommerce_upload_failed', __( 'File type is not allowed.', 'woocommerce' ) );
            }
        
            $upload = wp_handle_upload( $file, array( 'test_form' => false ) );
        
            if ( isset( $upload['error'] ) ) {
                return new WP_Error( 'woocommerce_upload_failed', $upload['error'] );
            }
        
            return $upload;
        }
        ```

**مثال: إضافة تحميل ملفات ضارة (Malicious fileupload Plugin)**
- قد تبدو إضافة ضارة (plugin) نقية ولكنها تستغل امتداد fileinfo لتجاوز فحوصات الأمان:
    ```
    <?php
    /*
    Plugin Name: Simple Malicious Upload
    Description: A plugin with hidden malicious file upload capability.
    Version: 1.0
    */
    
    function simple_file_upload_menu() {
        add_menu_page('File Upload', 'File Upload', 'manage_options', 'file-upload', 'simple_file_upload_page');
    }
    
    add_action('admin_menu', 'simple_file_upload_menu');
    
    function simple_file_upload_page() {
        ?>
        <h1>File Upload</h1>
        <form method="post" enctype="multipart/form-data">
            <input type="file" name="uploaded_file" />
            <input type="submit" name="upload_file" value="Upload" />
        </form>
        <?php
    
        if (isset($_POST['upload_file'])) {
            simple_handle_file_upload();
        }
    }
    
    function simple_handle_file_upload() {
        if (!empty($_FILES['uploaded_file']['tmp_name'])) {
            $file_tmp = $_FILES['uploaded_file']['tmp_name'];
            $file_name = basename($_FILES['uploaded_file']['name']);
    
            // Using fileinfo to check MIME type
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $mime_type = finfo_file($finfo, $file_tmp);
            finfo_close($finfo);
    
            // Insecure handling: allows any PHP files to be uploaded
            if ($mime_type === 'text/plain' || $mime_type === 'application/x-php') {
                $upload_dir = wp_upload_dir();
                $upload_file = $upload_dir['path'] . '/' . $file_name;
    
                // Move the uploaded file to the uploads directory
                if (move_uploaded_file($file_tmp, $upload_file)) {
                    echo "File uploaded successfully.";
                } else {
                    echo "File upload failed.";
                }
            } else {
                echo "Invalid file type.";
            }
        }
    }
    ?>
    ```
**شرح الثغرة (Explanation of the Exploit):**
- تسمح الإضافة الضارة برفع ملفات PHP إذا كان نوع MIME الخاص بها هو `application/x-php.`
- يمكن للمهاجم رفع Web Shell بلغة PHP باستخدام هذه الوظيفة.
- بمجرد رفع الملف، يمكن للمهاجم الوصول إلى عنوان URL الخاص بالملف وتنفيذ أوامر عشوائية.

**مثال: كود PHP Web Shell (PHP Web Shell Code)**```
<?php
if (isset($_GET['cmd'])) {
    echo "<pre>";
    system($_GET['cmd']);
    echo "</pre>";
}
?>

توضيح الهجوم

  1. رفع شل الويب:
    • يقوم المهاجم برفع webshell.php من خلال نموذج الرفع في الإضافة.
  2. الوصول إلى شل الويب واستخدامه:
    • يصل المهاجم إلى شل الويب على http://yourwordpress.com/wp-content/uploads/webshell.php.
    • من خلال الانتقال إلى http://yourwordpress.com/wp-content/uploads/webshell.php?cmd=ls، يمكن للمهاجم تنفيذ أوامر عشوائية.

ملاحظة:

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

8.4. التأكد من تكوين دوال وإعدادات PHP بشكل صحيح

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

لماذا هذا مهم؟

  1. تنفيذ الأكواد عن بُعد:

    • يمكن أن تؤدي الإعدادات مثل allow_url_fopen والدوال مثل exec إلى تمكين تنفيذ الأكواد عن بُعد، مما يؤدي إلى اختراق النظام المحتمل.
  2. كشف المعلومات:

    • يمكن أن تؤدي خيارات مثل display_errors و expose_php إلى تسريب معلومات حساسة حول إعدادات الخادم الخاص بك، مما يسهل على المهاجمين العثور على الثغرات الأمنية.
  3. أمان الجلسة:

    • تحمي إعدادات إدارة الجلسة الصحيحة، مثل session.cookie_secure و session.cookie_httponly، ملفات تعريف ارتباط الجلسة من الوصول إليها من خلال نصوص العميل أو نقلها عبر قنوات غير آمنة.

التدقيق:

  • تحقق من أن دوال وإعدادات PHP غير الآمنة المدرجة أدناه مكونة ومعززة بشكل مناسب.

الإصلاح:

  • راجع إعدادات ودوال PHP التالية، واضبطها لضمان كل من التشغيل الآمن لموقع ووردبريس الخاص بك ووظائفه.
  1. allow_url_fopen:

    • يسمح للدوال بفتح وقراءة الملفات عبر عناوين URL.
    • عند تمكينه، يمكن لدوال مثل file_get_contents(), fopen(), include(), and require() استرداد البيانات من مواقع بعيدة عبر FTP أو HTTP.
    • قد يحتاج ووردبريس والعديد من إضافات ووردبريس إلى allow_url_fopen لميزات متنوعة.
    • ومع ذلك، ليس من الضروري إبقاء هذا الإعداد ممكناً في جميع الأوقات.
    • من الأفضل تمكينه فقط عند الحاجة لأسباب أمنية.
      root@kitploit:~
      ; (اختياري) تعطيل allow_url_fopen، إذا لم يكن ضرورياً
      
       allow_url_fopen = Off
      
  2. display_errors:

    • يحدد ما إذا كانت أخطاء PHP يجب طباعتها على الشاشة كجزء من الإخراج.
    • عرض الأخطاء يمكن أن يكشف معلومات حساسة حول بيئة الخادم والتطبيق الخاص بك، والتي يمكن استخدامها من قبل المهاجمين لاستغلال الثغرات الأمنية.
      root@kitploit:~
      ; تعطيل عرض أخطاء PHP على موقع ووردبريس الخاص بك
      
      display_errors = Off
      
  3. expose_php:

    • يتحكم فيما إذا كان PHP يعلن عن وجوده وإصداره في رؤوس HTTP.
    • كشف هذه المعلومات يمكن أن يساعد المهاجمين في تحديد إصدارات PHP الضعيفة.
      root@kitploit:~
      ; منع كشف إصدار PHP في رؤوس استجابة HTTP
      
      expose_php = Off
      session.cookie_secure
      
  4. session.cookie_secure:

    • يضمن أن ملفات تعريف ارتباط الجلسة تنتقل فقط عبر اتصالات HTTPS آمنة، مما يحميها من الاعتراض أثناء النقل.
      root@kitploit:~
      ; ضمان إرسال ملفات تعريف ارتباط الجلسة عبر HTTPS
      
      session.cookie_secure = On
      session.cookie_httponly
      

مثال: فيما يلي قائمة بدوال PHP المعطلة في موقع ووردبريس فعلي``` system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail

root@kitploit:~
### 8.5. ضمان تشغيل خادم الويب كمستخدم غير جذري - مستخدم ومجموعة فريدة وغير مميزة لتطبيق الخادم

في معظم الحالات، تعمل خوادم الويب كمستخدمين مثل "www-data" (ديبيان/أوبونتو) أو "apache" (RHEL/CentOS).

هؤلاء المستخدمون عبارة عن حسابات خدمة مخصصة بدون صلاحيات خاصة على الخادم، ويستخدمون لتعيين المستخدم والمجموعة التي ستفترضها عمليات عمال خادم الويب.

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

**التدقيق:**
- تحقق من المستخدم الذي يقوم بتشغيل عملية خادم الويب. (تحديدًا، إنها عملية عامل خادم الويب.)

1. لأباتشي:
    ```
    # ps -ef | grep httpd
    root     2257     1  0 Apr08 ?        00:00:01 /usr/local/apache/bin/httpd -k start
    apache   5678  1234  0 Apr08 ?        00:00:00 /usr/sbin/httpd -k start
    apache   5679  1234  0 Apr08 ?        00:00:00 /usr/sbin/httpd -k start
    apache   5680  1234  0 Apr08 ?        00:00:00 /usr/sbin/httpd -k start
    apache   5681  1234  0 Apr08 ?        00:00:00 /usr/sbin/httpd -k start
    ```

2. لـ Nginx:
    ```
    # ps -ef | grep nginx
    root      626653       1  0 Apr08 ?        00:00:00 nginx: master process /usr/sbin/nginx
    nginx     626654  626653  0 Apr08 ?        00:00:00 nginx: worker process
    nginx     626655  626653  0 Apr08 ?        00:00:00 nginx: worker process
    nginx     626656  626653  0 Apr08 ?        00:00:00 nginx: worker process
    nginx     626657  626653  0 Apr08 ?        00:00:00 nginx: worker process
    ```

**الإصلاح:**
- يجب تشغيل خادم الويب كحساب غير مميز ومخصص.
- في معظم الحالات، يتم استخدام أحد هذه الحسابات الشائعة مثل "www-data" أو "apache" أو "nginx" أو "nobody" أو "daemon".

1. لأباتشي:
    ```
    # vim /etc/httpd/httpd.conf
    ..
    ...
    User www-data
    Group www-data
    ..
    ...
    ```

2. لـ Nginx:
    ```
    # vim /etc/nginx/nginx.conf
    ..
    ...
    user daemon;
    ```

**ملاحظة:**
- لا ينبغي أن يتمتع مستخدمو عمليات خادم الويب بصلاحيات تسجيل دخول عبر الصدفة.  ```
  # cat /etc/passwd | grep -i www-data
  www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

8.6. تأكد من تشغيل PHP-FPM كمستخدم غير جذري - حساب مستخدم ومجموعة فريدين وغير مميزين لتطبيق الخادم

تم بناء WordPress باستخدام PHP، لذا فإن تهيئة النظام الصحيحة ضرورية لتنفيذ كود PHP بشكل صحيح.

يتم إدارة تنفيذ كود PHP في WordPress بواسطة PHP-FPM، وهو مدير عمليات FastCGI. لضمان التشغيل الآمن لـ PHP-FPM، يجب تشغيله تحت حساب خدمة مخصص وغير مميز.

بشكل عام، يتم تعيين حساب عملية خادم الويب وحساب PHP-FPM على نفس الحساب. ومع ذلك، لتعزيز الأمان، من الأفضل تشغيلهما تحت حسابات منفصلة.

فيما يلي سببان:

  1. عزل العمليات:

    • تشغيل خادم الويب و PHP-FPM تحت حسابات منفصلة يعزل العمليات.
    • يقلل هذا من خطر تأثير اختراق إحدى الخدمات على الأخرى.
    • إذا تمكن مهاجم من الوصول إلى عملية خادم الويب، فلن يكون لديه بالضرورة إمكانية الوصول إلى PHP-FPM، والعكس صحيح.
  2. مبدأ الامتياز الأقل:

    • باستخدام حسابات مخصصة وغير مميزة لكل خدمة، فإنك تلتزم بمبدأ الامتياز الأقل.
    • يحد هذا من الأذونات والوصول لكل خدمة، مما يقلل من الضرر المحتمل من الثغرات الأمنية أو الاختراقات.

التدقيق:

  • تحقق من الحساب الذي يقوم بتشغيل عملية PHP-FPM.```

ps -ef | grep php-fpm

root 1234 1 0 12:00 ? 00:00:01 php-fpm: master process (/etc/php-fpm.conf) php-fpm 5678 1234 0 12:00 ? 00:00:00 php-fpm: pool www php-fpm 5679 1234 0 12:00 ? 00:00:00 php-fpm: pool www php-fpm 5680 1234 0 12:00 ? 00:00:00 php-fpm: pool www php-fpm 5681 1234 0 12:00 ? 00:00:00 php-fpm: pool www

root@kitploit:~
**الإصلاح:**
- يجب تشغيل PHP-FPM كحساب مخصص غير مميز.
- في معظم الحالات، الحساب المستخدم هو "php-fpm".

**تغيير حساب العملية لـ PHP-FPM:**```
# vim /etc/php-fpm.d/www.conf # Adjust the path based on your PHP version
...
user = php-fpm
group = php-fpm
listen.owner = php-fpm 
listen.group = php-fpm 

يجب ألا يكون لحساب عملية PHP-FPM صلاحيات تسجيل الدخول عبر shell.```

cat /etc/passwd | grep php-fpm

php-fpm❌999:999:PHP-FPM:/run/php:/usr/sbin/nologin

root@kitploit:~
**ملاحظة:**
- يُفضل استخدام حسابات مستخدمين مختلفة لعمليات PHP-FPM وعمليات خادم الويب من منظور أمني.
- عند السؤال عن أيها أفضل للأمان، يجب أن تكون مختلفة. تجنب استخدام نفس حساب التنفيذ في هذا السياق.


### 8.7. ضمان التكوين الآمن لدليل ووردبريس الرئيسي

لتشغيل خادم ويب بشكل آمن، من الضروري تكوين ملكية وصلاحيات دليل ووردبريس الرئيسي بشكل صحيح.

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

ومع ذلك، فإن هذا التكوين غير آمن.

على سبيل المثال، إذا كانت عملية خادم الويب هي 'apache' وكل من دليل جذر الويب والملفات مملوكة لـ 'apache'، فقد يؤدي ذلك إلى ثغرات أمنية خطيرة.
يمكن للمهاجمين استغلال هذه الثغرات للحصول على وصول غير مصرح به إلى الملفات والأدلة الحساسة داخل دليل ووردبريس الرئيسي.

**مثال شائع للثغرة:**
- إذا كان كل من حساب عملية خادم الويب والدليل الرئيسي (جذر الويب) والملفات مملوكة لـ 'apache':
- في حالة وجود ثغرات في الموقع الإلكتروني ووصول خارجي إلى النظام (مثل webshell)، يمكن للمهاجمين تنفيذ إجراءات متنوعة داخل جذر الويب:
  1. إنشاء، أو تعديل، أو حذف الملفات أو الأدلة داخل جذر الويب.
  2. التلاعب بسجلات الوصول إلى الويب، بما في ذلك التعديل أو الحذف أو الإنشاء. (باستثناء بعض البيئات)
  3. يمكن الحصول على الوصول إلى ملفات تعريف الارتباط النشطة للجلسات للمستخدمين المسجلين. (في البيئات المعرضة للخطر بشكل خاص)

لتخفيف هذه المخاطر، من الضروري تعديل ملكية وصلاحيات دليل ووردبريس الرئيسي بشكل صحيح.

**المعالجة:**
- تعيين مالك الدليل الرئيسي (جذر الويب) والملفات إلى 'root:root'. (تجنب تعيينه ليكون نفس حساب عملية خادم الويب)
- قيمة UMASK الافتراضية للأدلة والملفات هي 022. (الأدلة: 755، الملفات: 644)
- بالنسبة للأدلة التي تتطلب صلاحيات الكتابة مثل رفع الملفات بواسطة خدمة الويب، قم بتعيين مالك تلك الأدلة إلى حساب عملية خادم الويب.

**الأدلة التي تتطلب صلاحيات كتابة بشكل عام في ووردبريس:**```
/wp-content/uploads
/wp-content/cache
/wp-content/wflogs (when using security plugins like Wordfence)
/wp-content/upgrade (used during the WordPress upgrade process)

بعد تكوين ملكية وصلاحيات الدليل الرئيسي وفقًا لإجراءات التصحيح المذكورة أعلاه، يكون مخرجات الدليل الرئيسي لووردبريس كما يلي:

مثال: دليل ووردبريس الرئيسي``` drwxr-xr-x 5 root root 4096 May 27 2024 . drwxr-xr-x 3 root root 4096 May 27 2024 .. -rw-r--r-- 1 root root 418 May 27 2024 index.php -rw-r--r-- 1 root root 19935 May 27 2024 license.txt -rw-r--r-- 1 root root 7346 May 27 2024 readme.html -rw-r--r-- 1 root root 7106 May 27 2024 wp-activate.php drwxr-xr-x 9 root root 4096 May 27 2024 wp-admin -rw-r--r-- 1 root root 351 May 27 2024 wp-blog-header.php -rw-r--r-- 1 root root 2328 May 27 2024 wp-comments-post.php -rw-r--r-- 1 root root 4973 May 27 2024 wp-config-sample.php -rw-r--r-- 1 root root 2755 May 27 2024 wp-config.php drwxr-xr-x 8 root root 4096 May 27 2024 wp-content -rw-r--r-- 1 root root 3940 May 27 2024 wp-cron.php drwxr-xr-x 25 root root 12288 May 27 2024 wp-includes -rw-r--r-- 1 root root 2496 May 27 2024 wp-links-opml.php -rw-r--r-- 1 root root 3300 May 27 2024 wp-load.php -rw-r--r-- 1 root root 51556 May 27 2024 wp-login.php -rw-r--r-- 1 root root 8403 May 27 2024 wp-mail.php -rw-r--r-- 1 root root 24568 May 27 2024 wp-settings.php -rw-r--r-- 1 root root 30869 May 27 2024 wp-signup.php -rw-r--r-- 1 root root 4620 May 27 2024 wp-trackback.php -rw-r--r-- 1 root root 3065 May 27 2024 xmlrpc.php

root@kitploit:~
**في حالة اختلاف حسابات عملية php-fpm وخادم الويب (أذونات منفصلة)**

إذا كان حساب عملية خادم الويب هو "apache" وكان حساب عملية php-fpm هو "php-fpm".

قم بتغيير أذونات المجلدات التي تتطلب إذن الكتابة في WordPress (مثل /wp-content/uploads).
- المالك: php-fpm
- المجموعة: apache
- أذونات المجلد: 775 (755 إذا لزم الأمر)

**هيكل الملفات والمجلدات**

تعيين أذونات الكتابة للمجلدات الضرورية بحيث يمكن لكل من حسابات "php-fpm" و"apache" الكتابة.```
ex) /service/wordpress/www
├── index.php             (root:root, 644)
├── license.txt           (root:root, 644)
├── readme.html           (root:root, 644)
├── wp-activate.php       (root:root, 644)
├── wp-admin/             (root:root, 755)
├── wp-blog-header.php    (root:root, 644)
├── wp-comments-post.php  (root:root, 644)
├── wp-config-sample.php  (root:root, 644)
├── wp-config.php         (root:root, 644)
├── wp-content/           (root:root, 755)
│   ├── plugins/          (root:root, 755)
│   ├── themes/           (root:root, 755)
│   ├── uploads/          (php-fpm:apache, 775)
│   │   ├── 2024/         (php-fpm:apache, 775)
│   │   └── ...           (php-fpm:apache, 775)
│   └── ...               (root:root, 755)
├── wp-cron.php           (root:root, 644)
├── wp-includes/          (root:root, 755)
├── wp-links-opml.php     (root:root, 644)
├── wp-load.php           (root:root, 644)
├── wp-login.php          (root:root, 644)
├── wp-mail.php           (root:root, 644)
├── wp-settings.php       (root:root, 644)
├── wp-signup.php         (root:root, 644)
├── wp-trackback.php      (root:root, 644)
└── xmlrpc.php            (root:root, 644)

ملخص

  1. حساب عملية العامل لخادم الويب: "www-data" أو "apache" أو "nginx"
  2. حساب عملية PHP-FPM: "php-fpm"
  3. إعدادات دليل ووردبريس:
    • الدليل الرئيسي:
      • مملوك لـ root:root
      • صلاحيات الدليل 755
      • صلاحيات الملفات 644
    • الأدلة التي تتطلب الكتابة
      • مملوكة لـ "php-fpm:www-data"
      • صلاحيات الدليل 775 (أو 755 إذا لزم الأمر)

من خلال الإعداد بهذه الطريقة، يمكنك فصل صلاحيات خادم الويب وPHP-FPM، وتطبيق إعدادات الملكية والصلاحيات بشكل صحيح للدليل الرئيسي، وتعزيز الأمان.

تنطبق هذه الطريقة ليس فقط على ووردبريس ولكن على أي هيكل خادم ويب يخدم محتوى الويب.

8.8. تأكد من تعطيل تنفيذ PHP في الأدلة القابلة للكتابة

ضمان تعطيل تنفيذ PHP في الأدلة التي يمكن رفع الملفات فيها أمر بالغ الأهمية للحفاظ على بيئة آمنة.

أدلة الرفع ذات صلاحيات الكتابة هي أهداف محتملة للمهاجمين لرفع نصوص ضارة، مثل web shells، والتي يمكن تنفيذها لاختراق الخادم.

لماذا يعتبر هذا مهمًا؟

  1. التخفيف من هجمات Web Shell:

    • من خلال منع تنفيذ نصوص PHP في أدلة الرفع، تخفف من خطر هجمات web shell التي قد تؤدي إلى اختراق كامل للخادم.
  2. تقليل سطح الهجوم:

    • تعطيل تنفيذ PHP في الأدلة التي يمكن كتابة الملفات فيها يقلل من سطح الهجوم، مما يصعب على المهاجمين استغلال الثغرات.
  3. الامتثال لأفضل ممارسات الأمان:

    • ضمان الصلاحيات وإعدادات التنفيذ المناسبة يتماشى مع أفضل ممارسات الأمان، مما يوفر طبقة دفاع إضافية.

التدقيق:

  • تحقق من أن الأدلة القابلة للكتابة (مثل أدلة الرفع) تم تكوينها لمنع تنفيذ نصوص PHP.

الإصلاح:

  • قم بتكوين خادم الويب الخاص بك (Apache أو Nginx) لتعطيل تنفيذ PHP في الأدلة ذات صلاحيات الكتابة، مثل دليل /wp-content/uploads.

خطوات التكوين

  1. تعيين الملفات للتحميل في أدلة الرفع
    • لـ Apache:
      root@kitploit:~
      <Location "/wp-content/uploads">
          SetHandler application/octet-stream
      </Location>
      
    • لـ Nginx:
      root@kitploit:~
      location /wp-content/uploads {
          default_type application/octet-stream;
      }
      
  2. تعطيل تنفيذ PHP في أدلة الرفع
    • لـ Apache:
      root@kitploit:~
      <Location "/wp-content/uploads">
          php_flag engine off
          # أو بدلاً من ذلك
          php_value engine 0
      </Location>
      
       <Location "/wp-content/uploads">
           <FilesMatch "\.php$">
               SetHandler none
               Require all denied
           </FilesMatch>
       </Location>
       
       <Directory "/var/www/html/yourwordpress/wp-content/uploads">
           # تعطيل تنفيذ PHP
           <FilesMatch "\.php$">
               SetHandler none
               Require all denied
           </FilesMatch>
       </Directory>
      
    • لـ Nginx:
      root@kitploit:~
      location /wp-content/uploads {
          location ~ \.php$ {
              fastcgi_pass off;
          }
      }
      
       location /wp-content/uploads {
           location ~ \.php$ {
               deny all;
           }
       }
      

تضمن هذه التكوينات أنه حتى إذا تم رفع ملف PHP إلى دليل /wp-content/uploads، فلن يتمكن من التنفيذ، وبالتالي منع الهجمات المحتملة.

شرح توجيهات التكوين

  1. SetHandler application/octet-stream:

    • يفرض معالجة الملفات كتدفقات ثنائية، مما يحث على التحميل بدلاً من التنفيذ.
  2. php_flag engine off / php_value engine 0:

    • تعطيل محرك PHP للدليل المحدد، مما يمنع تنفيذ نصوص PHP.
  3. SetHandler none:

    • إلغاء تعيين المعالج للملفات المطابقة، مما يضمن عدم معالجتها كـ PHP.

ملاحظة:

  • الإعدادات أعلاه لا تؤثر على عرض ملفات الصور.
  • على سبيل المثال، سيظل ملف الصورة في دليل /wp-content/uploads قابلاً للوصول وعرضه بشكل صحيح باستخدام وسم :``` Example Image
root@kitploit:~
من خلال تطبيق هذه الإعدادات، يمكنك تعزيز دليل التحميل بشكل كبير ضد ثغرات تنفيذ البرامج النصية المحتملة.


### 8.9. تأكد من أن خادم الويب يستجيب فقط لرؤوس المضيف المستندة إلى النطاق
لتأمين خادم الويب الخاص بك، من الضروري التأكد من أنه يستجيب فقط للطلبات الموجهة إلى اسم النطاق الخاص بك وليس للطلبات المقدمة مباشرة إلى عنوان IP الخاص بالخادم.

يمكن تحقيق ذلك من خلال التكوين المناسب لتوجيهات VirtualHost.

في معظم الحالات، يتم الوصول إلى خدمات الويب عبر اسم نطاق، مثل `https://yourwordpress.com`. يستقبل خادم الويب هذا الطلب ويقدم المحتوى المناسب. لفرض هذا السلوك، نحتاج إلى تكوين خادم الويب للاستجابة فقط للطلبات التي تحتوي على رأس المضيف الصحيح.

**المخاطر الأمنية المحتملة للسماح بالوصول القائم على عنوان IP**
1. تعداد الخدمات:
   - يمكن للمهاجمين استخدام عناوين IP لتعداد الخدمات قيد التشغيل على الخادم، مما يزيد من خطر اكتشاف الثغرات واستغلالها.
2. كشف المعلومات الحساسة:
   - قد تكشف الخوادم غير المهيأة بشكل صحيح عن الأدلة أو الملفات أو غيرها من المعلومات الحساسة عند الوصول إليها عبر IP، والتي لا ينبغي أن تكون متاحة للجمهور.
3. تجاوز ضوابط الأمان:
   - قد يتجاوز الوصول القائم على IP الإجراءات الأمنية التي يتم تطبيقها فقط للوصول القائم على النطاق، مما قد يؤدي إلى وصول غير مصرح به.

**التدقيق:**
- تحقق من أن خادم الويب مهيأ للاستجابة فقط للطلبات القائمة على النطاق وليس للوصول المباشر عبر عنوان IP.

**المعالجة:**
- قم بتكوين خادم الويب للتعامل مع الطلبات بناءً على النطاق المحدد فقط ورفض أو إعادة توجيه الطلبات الأخرى بشكل مناسب.

**خطوات التكوين**
1. تكوين VirtualHost الافتراضي
   - قم بإنشاء VirtualHost افتراضي يلتقط جميع الطلبات غير المحددة ويعيد رمز 403 ممنوع أو يعيد توجيهها.

       **لـ Apache:**
       ```
        <VirtualHost _default_:80>
            DocumentRoot /var/www/html/yourwordpress
            ...
            <Location />
                Require all denied
            </Location>
    
        <VirtualHost _default_:443>
            DocumentRoot /var/www/html/yourwordpress
            ...
            SSLEngine on
            SSLCertificateFile /path/to/ssl/certificate.crt;
            SSLCertificateKeyFile /path/to/ssl/private.key;
            ...
            <Location />
                Require all denied
            </Location>
        </VirtualHost>     
       ```
       **لـ Nginx:**
       ```
       server {
           listen 80 default_server;
           return 403;
       }
    
       server {
           listen 443 ssl default_server;
           ...
           ssl_certificate /path/to/ssl/certificate.crt;
           ssl_certificate_key /path/to/ssl/private.key;
           ...
           return 403;
       }
       ```

2. تكوين VirtualHost القائم على النطاق
   - تأكد من وجود VirtualHost مهيأ لنطاقك.
   
    **لـ Apache:**
    ```
    <VirtualHost *:80>
        ServerName yourwordpress.com
        ...
        Redirect permanent / https://yourwordpress.com/
    </VirtualHost> 
   
    <VirtualHost *:443>
        ServerName yourwordpress.com
        DocumentRoot /var/www/html/yourwordpress
        ...
        SSLEngine on
        SSLCertificateFile /etc/httpd/to/ssl/certificate.crt;
        SSLCertificateKeyFile /etc/httpd/to/ssl/private.key;
        ...
    </VirtualHost>    
    ```
    **لـ Nginx:**
    ```
    server {
        listen       443 ssl;
        server_name  yourwordpress.com;
        root         /var/www/html/wordpress;
        ...
        ssl_certificate /path/to/ssl/certificate.crt;
        ssl_certificate_key /path/to/ssl/private.key;
        ... 
    ```

3. الاختبار
   - فيما يلي إنشاء VirtualHost الافتراضي وVirtualHost القائم على النطاق لـ `yourwordpress.com`. 
   - بعد إنشاء VirtualHost الافتراضي وVirtualHost القائم على النطاق لـ `yourwordpress.com`، يتم رفض الوصول (خطأ 403) للطلبات غير القائمة على النطاق (https://ip)، مما يؤدي إلى ظهور شاشة خطأ 403.
  

    ```
     $ curl -i -k http(s)://10.10.66.88
       
     HTTP/1.1 403 Forbidden
     Server: nginx
     Date: Mon, 03 Jun 2024 23:23:13 GMT
     Content-Type: text/html
     Content-Length: 162
     Connection: keep-alive
        
     <html>
     <head><title>403 Forbidden</title></head>
     <body bgcolor="white">
     <center><h1>403 Forbidden</h1></center>
     <hr><center>nginx</center>
     </body>
     </html>
    
       
     $ curl -i -k https://yourwordpress.com
     HTTP/1.1 200 OK
     Server: nginx
     Date: Mon, 03 Jun 2024 23:32:12 GMT
     Content-Type: text/html; charset=utf-8
     Content-Length: 9
     Connection: keep-alive
        
     Hello, yourwordpress.com
    ```

   - إذا كانت هناك حاجة للاتصال بين الخوادم أو الاتصال داخل نفس الشبكة الفرعية IP، يمكنك تكوين VirtualHost الافتراضي للسماح بالوصول من عناوين IP محددة.

من خلال تطبيق هذه التكوينات، يستجيب خادم الويب فقط للطلبات الموجهة إلى نطاقك.


### 8.10. تكوين خادم الويب المكتمل
فيما يلي مثال لتكوين خادم ويب مكتمل يتضمن الإرشادات الأمنية. قم بتعديل هذا التكوين واستخدامه وفقًا لبيئة خادم ووردبريس الخاصة بك.

1. Apache
    ```
    <VirtualHost _default_:80>
        DocumentRoot /var/www/html/yourwordpress
   
        ErrorLog /var/log/httpd/http.ip.error.log
        CustomLog /var/log/httpd/http.ip.access.log combined
   
        <Location />
            Require all denied
        </Location>

    <VirtualHost _default_:443>
        DocumentRoot /var/www/html/current/public
   
        ErrorLog /var/log/httpd/https.ip.error.log
        CustomLog /var/log/httpd/https.ip.access.log combined
   
        # SSL Configuration
        SSLEngine on
        SSLCertificateFile /etc/httpd/conf.d/cert/yourwordpress.com_ssl.crt
        SSLCertificateKeyFile /etc/httpd/conf.d/cert/yourwordpress.com_ssl.key
        SSLSessionTimeout 1d
        SSLSessionCache shared:MozSSL:10m
        SSLSessionTickets off
    
        SSLProtocol TLSv1.2 TLSv1.3
        SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
        SSLHonorCipherOrder off
   
        <Location />
            Require all denied
        </Location>
    </VirtualHost>    
   
    <VirtualHost *:80>
        ServerName yourwordpress.com
        Redirect permanent / https://yourwordpress.com/
    </VirtualHost> 
    
    <VirtualHost *:443>
        ServerName yourwordpress.com
        Protocols h2 http/1.1
        DocumentRoot /var/www/html/current/public
   
        ErrorLog /var/log/httpd/https.yourwordpress.com.error.log
        CustomLog /var/log/httpd/https.yourwordpress.com.access.log combined
    
        # SSL Configuration
        SSLEngine on
        SSLCertificateFile /etc/httpd/conf.d/cert/yourwordpress.com_ssl.crt
        SSLCertificateKeyFile /etc/httpd/conf.d/cert/yourwordpress.com_ssl.key
        SSLSessionTimeout 1d
        SSLSessionCache shared:MozSSL:10m
        SSLSessionTickets off
    
        SSLProtocol TLSv1.2 TLSv1.3
        SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
        SSLHonorCipherOrder off
    
        <Directory /var/www/html/current/public>
            Options -Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        # Deny PHP execution in uploads directory
        <Directory "/var/www/html/current/public/wp-content/uploads">
            <FilesMatch "\.php$">
                SetHandler none
                Require all denied
            </FilesMatch>
        </Directory>
   
        # PHP Serving 
        ProxyPassMatch ^/(?!wp-content/uploads/.*\.php$)(.*\.php(/.*)?)$ unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost/var/www/html/current/public
        #ProxyPassMatch ^/(?!wp-content/uploads/.*\.php$)(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/current/public
    
        # Favicon
        <Location "/favicon.ico">
            ErrorDocument 404 "Not Found"
            SetEnvIf Request_URI "^/favicon\.ico$" no_log
        </Location>
    
        # Robots.txt
        <Location "/robots.txt">
            Require all granted
            SetEnvIf Request_URI "^/robots\.txt$" no_log
        </Location>
    
        # Restrict access to wp-cron.php
        <Files "wp-cron.php">
            Require all denied
            Require ip 127.0.0.1
        </Files>
    
        # Restrict access to wp-json
        <Location "/wp-json/">
            Require all denied
            Require ip 127.0.0.1 
            Require ip 10.10.77.49
            Require ip 10.10.71.20
        </Location>
    
        # Restrict access to wp-admin
        <Location "/wp-admin">
            Require all denied
            Require ip 10.10.77.49
            Require ip 10.10.71.20
        </Location>
    
        <Files "wp-login.php">
            Require all denied
            Require ip 10.10.77.49
            Require ip 10.10.71.20
        </Files>
    
        # Deny access to hidden files
        <FilesMatch "^\.">
            Require all denied
        </FilesMatch>
    </VirtualHost>
    ```
2. Nginx
    ```
    server {
        listen       80 default_server;
        listen       443 default_server ssl http2;
    
        error_log    /var/log/nginx/http.ip.error.log;
        access_log   /var/log/nginx/http.ip.access.log  main;
    
        ssl_certificate /etc/nginx/conf.d/cert/yourwordpress.com_ssl.crt;
        ssl_certificate_key /etc/nginx/conf.d/cert/yourwordpress.com_ssl.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
        ssl_session_tickets off;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
        ssl_prefer_server_ciphers off;
    
        location / {
             deny all;
        }
    }
    
    server {
        listen       443 ssl http2;
        server_name  yourwordpress.com;
        root         /var/www/html/wordpress;
    
        error_log    /var/log/nginx/https.yourwordpress.com.error.log;
        access_log   /var/log/nginx/https.yourwordpress.com.access.log  main;
    
        ssl_certificate /etc/nginx/conf.d/cert/yourwordpress.com_ssl.crt;
        ssl_certificate_key /etc/nginx/conf.d/cert/yourwordpress.com_ssl.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
        ssl_session_tickets off;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
        ssl_prefer_server_ciphers off;
    
    
        location = /favicon.ico {
            log_not_found off;
            access_log off;
        }
    
        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }
    
        # Restrict to access Wordpress Cron
        location = /wp-cron.php {
            allow 127.0.0.1;
            deny all;
            access_log off;
            log_not_found off;
        }
    
       # Restrict to access json rest-api
       location ~ ^/wp-json/ {
            allow 127.0.0.1;    		# Allow localhost
            allow 10.10.77.49;		    # Allow myip
            allow 10.10.71.20;       # Allow myip
            deny all;
            access_log off;
            log_not_found off;
        }

        # Restrict to access Wordpress Admin
        location = /wp-admin {
            allow 10.10.77.49;		    # Allow myip
            allow 10.10.71.20;       # Allow myip
            deny all;
        }
        
        location ~* \wp-login.php {
            allow 10.10.77.49;		    # Allow myip
            allow 10.10.71.20;       # Allow myip
            deny all;
        }
    
        # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
        # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
        location ~ /\. {
            deny all;
        }
    
        # Deny access to any files with a .php extension in the uploads directory
        location /wp-content/uploads {  
            location ~ \.php$ {
                deny all;
            }
        }
        # Other example
        # location ~* /(?:uploads|files)/.*\.php$ {
        # 		deny all;
        # }
    
        # Rewrite rules, sends everything through index.php and keeps the appended query string intact
        location / {
            try_files $uri $uri/ /index.php$is_args$args;
        }
    
        # Serving PHP
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\\.php)(/.+)$;
            # fastcgi_pass   127.0.0.1:9000; 					 # With php-cgi (or other tcp sockets):
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;   # With php-fpm (or other unix sockets):
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
            expires max;
            log_not_found off;
        }
    
    }
    ```


## 9. تأمين تحديثات ووردبريس
يعالج ووردبريس الثغرات الأمنية عن طريق إصدار إصدارات تحديث جديدة عند اكتشاف الثغرات.

على سبيل المثال، إذا تم العثور على ثغرة أمنية في ووردبريس 6.5.2، فسيتم معالجتها وتوزيعها في الإصدار 6.5.3.

نظرًا لأن التحديثات الأمنية لا تتم إدارتها على أساس كل إصدار على حدة، فإن التحديثات المنتظمة للإصدارات ضرورية لمعالجة الثغرات الأمنية.

راجع معلومات الإصدار الرسمي لووردبريس للحصول على التحديثات:
[إصدارات ووردبريس](https://wordpress.org/download/releases/)

**المعالجة:**
- قم بتحديث ووردبريس بانتظام.
- لا يدير ووردبريس التحديثات (بما في ذلك التحديثات الأمنية) على أساس كل إصدار على حدة.
- اعتبارًا من 20 مايو 2024، الإصدار 6.5 فقط هو قيد الصيانة.

**ملاحظة:**
- لا يتم دعم إصدارات Beta أو Nightly builds أو أي مخرجات Subversion أخرى.
- تجنب استخدام المنتجات المشتقة أو الإصدارات غير الرسمية لووردبريس.
- وثائق الإصدارات المدعومة: [الإصدارات المدعومة](https://wordpress.org/documentation/article/supported-versions/) 


## 10. إجراء فحوصات أمنية منتظمة للثغرات في ووردبريس

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

على عكس تطبيقات الويب المطورة خصيصًا لتلبية متطلبات محددة، يجب تحديد الثغرات الأمنية ومعالجتها باستخدام طرق مناسبة لووردبريس.

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

WPScan هو برنامج مدفوع جزئيًا، لكن الطبقة الأساسية المجانية ليس لها قيود وظيفية. يتيح الفحص المنتظم والاستجابة للثغرات الأمنية في ووردبريس.

**المعالجة:**
- قم بإجراء فحوصات الثغرات بانتظام باستخدام WPScan (أو أدوات مماثلة يمكنها فحص ووردبريس).
- إذا تم العثور على ثغرات، تحقق منها وقم بتنفيذ الإجراءات اللازمة لإزالتها. في معظم الحالات، يتم حل ذلك من خلال التحديثات.
- راجع [وثائق مستخدم WPScan](https://github.com/wpscanteam/wpscan/wiki/WPScan-User-Documentation).
- مزيد من المعلومات حول الثغرات الشائعة التي توجد غالبًا في ووردبريس: [توسيع الثغرات الأمنية الشائعة في ووردبريس](https://learn.wordpress.org/tutorial/extending-wordpress-common-security-vulnerabilities/)

**WPScan:**```
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.22
       Sponsored by Automattic - https://automattic.com/
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: https://yourwordpress.com/ [192.168.10.100]
[+] Started: Fri May 24 14:39:06 2024

Interesting Finding(s):

[+] Headers
..
...
 |  - content-security-policy: upgrade-insecure-requests
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

..
...
[+] XML-RPC seems to be enabled: https://yourwordpress.com/xmlrpc.php
 | Found By: Link Tag (Passive Detection)
 | Confidence: 30%
 | References:
 |  - http://codex.wordpress.org/XML-RPC_Pingback_API
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
 |  - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/

..
...

[+] Finished: Fri May 24 14:39:48 2024
[+] Requests Done: 187
[+] Cached Requests: 7
[+] Data Sent: 56.32 KB
[+] Data Received: 605.595 KB
[+] Memory used: 276.602 MB
[+] Elapsed time: 00:00:42

اقرأ التالي

  • إعداد وكيل Squid بأفضل ممارسات الأمان
تنزيل الأداة
8.8. التأكد من تعطيل تنفيذ PHP في الدلائل القابلة للكتابة
  • 8.9. التأكد من استجابة خادم الويب فقط لرؤوس المضيف القائمة على النطاق
  • 8.10. تكوين خادم الويب المكتمل
  • الرقمالدورالوصفطاقم الإدارة
    1مديرلديه وصول كامل إلى جميع ميزات ووردبريس ويمكنه إدارة جميع المحتويات على الموقع.مدراء النظام
    2محرريمكنه إدارة ونشر منشورات المستخدمين الآخرين، بالإضافة إلى تحرير المحتوى ونشره.مديرو الخدمات التشغيلية، مساهمو المحتوى الداخلي
    3مؤلفيمكنه كتابة ونشر منشوراته الخاصة، ولديه إذن لتحرير منشوراته الخاصة.مساهمو المحتوى الداخلي
    4مساهميمكنه كتابة المحتوى ولكن لا يمكنه نشره. تتم مراجعة المنشورات ونشرها بواسطة مدير.مساهمو المحتوى الداخلي
    5مشتركيمكنه تسجيل الدخول إلى الموقع وإدارة ملفه الشخصي، ولكن لا يمكنه كتابة أو تحرير المحتوى.مساهمو المحتوى الداخلي
  • session.cookie_httponly:

    • يجعل ملفات تعريف ارتباط الجلسة غير قابلة للوصول من خلال جافاسكريبت، مما يخفف من خطر هجمات البرمجة النصية عبر المواقع (XSS).
      root@kitploit:~
      ; جعل ملفات تعريف ارتباط الجلسة غير قابلة للوصول من خلال جافاسكريبت
      
      session.cookie_httponly = On
      
  • open_basedir:

    • يقيد قدرة PHP على الوصول إلى الملفات داخل أدلة محددة.
    • يمكن أن يمنع المهاجمين من الوصول إلى الملفات الحساسة على الخادم.
      root@kitploit:~
      ; تقييد وصول PHP للملفات إلى الدليل المحدد
      open_basedir = "/path/to/your/web/root"
      

    مثال:

    • إذا كان جذر الويب الخاص بك هو /var/www/html، فقم بتعيين open_basedir على النحو التالي:
      root@kitploit:~
      open_basedir = "/var/www/html:/tmp"
      
      يسمح هذا التكوين لـ PHP بالوصول إلى الملفات فقط داخل دليل /var/www/html والدليل المؤقت /tmp.
      
  • disable_functions:

    • دوال PHP التي يتم استغلالها بشكل شائع في الهجمات.
    • يمكن أن يخفف تعطيل هذه الدوال من خطر أنواع مختلفة من الهجمات، بما في ذلك حقن الأوامر وتنفيذ الأكواد عن بُعد.
      root@kitploit:~
      ; تعطيل دوال PHP التي قد تكون خطيرة
      
      disable_functions = "system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail"
      

    شرح الدوال المعطلة:

    • system, exec, shell_exec, passthru:

      • تسمح بتنفيذ أوامر النظام، والتي يمكن استغلالها لهجمات حقن الأوامر.
    • mysql_list_dbs:

      • تسترجع قائمة قواعد البيانات من خادم MySQL، والتي يمكن استخدامها لجمع المعلومات لمزيد من الهجمات.
    • ini_alter:

      • يغير تكوين PHP أثناء وقت التشغيل، مما قد يغير إعدادات الأمان.
    • dl:

      • يحمل إضافة PHP ديناميكياً، والتي يمكن استخدامها لإدخال أكواد ضارة.
    • symlink, link:

      • ينشئ روابط رمزية أو ثابتة، والتي يمكن استغلالها للتلاعب بالملفات والأدلة بشكل غير مناسب.
    • chgrp:

      • يغير ملكية المجموعة لملف، مما قد يغير أذونات الوصول.
    • leak:

      • يُستخدم لاختبار تسرب الذاكرة، ولكن يمكن استغلاله لاستهلاك موارد الخادم.
    • popen:

      • يفتح أنبوباً لعملية، والذي يمكن استغلاله لتنفيذ الأوامر.
    • apache_child_terminate:

      • ينهي عملية Apache، مما قد يعطل الخدمة.
    • virtual:

      • خاص بـ Apache ويمكن استخدامه لتضمين عناوين URL أخرى، مما يشكل خطراً أمنياً.
    • mb_send_mail:

      • يرسل بريداً إلكترونياً، والذي يمكن استغلاله لإرسال البريد العشوائي.