ووردبريس

تأمين WordPress 2026: hardening كامل، Wordfence، 2FA وbackup

9 دقائق للقراءة

السلسلة: WordPress REST API 2026 · Elementor 2026: Theme Builder والأداء · أداء WordPress: Core Web Vitals

WordPress يُشغّل أكثر من 43% من مواقع الويب في 2026 — ما يجعله أيضًا الهدف الأكثر شعبية للهجمات. brute-force على wp-login، SQL injection عبر plugins، XSS، malware injection، DDoS، file enumeration. أمن WordPress ليس خيارًا، إنه قاعدة. يستعرض هذا الدرس hardening كامل على ثلاث طبقات: WordPress core، .htaccess، وplugins الأمن الرئيسية. مع PHP 8.3 LTS، WordPress 6.8+، Wordfence 8.x وSolid Security 9.x (المعروف سابقًا كـ iThemes Security)، يمكن للموقع المهني الوصول لمستوى أمان ممتاز دون عقد إضافي.

المتطلبات

  • WordPress 6.8+ مع الحفاظ على التحديثات التلقائية للأمان
  • PHP 8.3 LTS أو 8.4 على الخادم
  • وصول SSH/FTP للخادم وتعديل .htaccess وwp-config.php
  • نسخة احتياطية كاملة (BackupBuddy، UpdraftPlus، أو manual) قبل أي تغيير
  • المستوى: مسؤول WordPress متوسط
  • الوقت المُقدَّر: 2-3 ساعات

الخطوة 1 — wp-config.php hardening

ملف wp-config.php هو القلب التشغيلي لـ WordPress. عدة ثوابت أمان حاسمة:

// wp-config.php — placer AVANT le require_once ABSPATH

// 1. Sécurité de base
define('DISALLOW_FILE_EDIT', true);     // Désactive éditeur thème/plugin dans wp-admin
define('DISALLOW_FILE_MODS', true);     // Empêche installation plugins/thèmes via wp-admin
define('FORCE_SSL_ADMIN', true);        // Force HTTPS pour admin
define('WP_AUTO_UPDATE_CORE', 'minor'); // Auto-update mineures + sécurité

// 2. Secret keys (régénérer si compromission)
// https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY',         'unique-string-1...');
define('SECURE_AUTH_KEY',  'unique-string-2...');
define('LOGGED_IN_KEY',    'unique-string-3...');
define('NONCE_KEY',        'unique-string-4...');
define('AUTH_SALT',        'unique-string-5...');
define('SECURE_AUTH_SALT', 'unique-string-6...');
define('LOGGED_IN_SALT',   'unique-string-7...');
define('NONCE_SALT',       'unique-string-8...');

// 3. Préfixe tables non-standard (réduit attaques SQL injection automatisées)
$table_prefix = 'wp_x9k_';

// 4. Désactiver REST API users endpoint pour non-authentifiés
// (Voir le tutoriel REST API pour le code complet)

// 5. Limiter révisions (réduit taille DB et surface attaque)
define('WP_POST_REVISIONS', 5);
define('AUTOSAVE_INTERVAL', 300);   // Save toutes les 5min

// 6. Désactiver XML-RPC (vecteur d'attaque obsolète)
add_filter('xmlrpc_enabled', '__return_false');

// 7. Permissions strictes
define('FS_METHOD', 'direct');
// chmod 600 wp-config.php   (en SSH)

المفتاحان DISALLOW_FILE_EDIT وDISALLOW_FILE_MODS يمنعان مهاجمًا وصل لحساب admin من تعديل ملفات أو رفع plugins خبيثة. chmod 600 wp-config.php يحمي الملف من القراءة بمستخدمين آخرين على الخادم المشترك.

الخطوة 2 — .htaccess hardening

ملف .htaccess في الجذر هو طبقة دفاع قبل WordPress. القواعد التالية تحجب هجمات شائعة قبل وصولها لـ PHP.

# .htaccess à la racine

# 1. Bloquer accès aux fichiers sensibles
<FilesMatch "^(wp-config\.php|install\.php|upgrade\.php|\.htaccess|\.htpasswd|readme\.html|license\.txt|debug\.log|error_log|.*\.bak|.*\.sql|composer\.(json|lock)|\.env.*)$">
    Require all denied
</FilesMatch>

# 2. Bloquer xmlrpc.php (défense en profondeur)
<Files "xmlrpc.php">
    Require all denied
</Files>

# 3. Bloquer énumération auteurs ?author=N
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} (^|&)author=\d [NC]
    RewriteRule .* / [L,R=301]
</IfModule>

# 4. Bloquer REST API users endpoint pour anonymes
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/wp-json/wp/v2/users($|/) [NC]
    RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_ [NC]
    RewriteRule .* - [F]
</IfModule>

# 5. Désactiver indexing directories
Options -Indexes -ExecCGI
ServerSignature Off

# 6. Bloquer exécution PHP dans uploads
<Directory "wp-content/uploads">
    <FilesMatch "\.(?i:php|phtml|phps|pht|phar|cgi|pl|py|jsp|asp|sh|bash)$">
        Require all denied
    </FilesMatch>
</Directory>

# 7. Headers sécurité
<IfModule mod_headers.c>
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Content-Type-Options "nosniff"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
</IfModule>

# 8. Limiter taille upload (anti-DDoS)
LimitRequestBody 10485760   # 10 MB max

القاعدة 6 حاسمة: إذا نجح مهاجم في رفع ملف PHP إلى uploads (عبر plugin معطوب)، Apache يرفض تنفيذه. كثير من الإصابات نُوقفت بهذه القاعدة وحدها. القاعدة 4 تحجب enumération المستخدمين عبر REST، ناقل شائع جدًا للهجمات.

الخطوة 3 — صلاحيات الملفات Linux

صلاحيات Unix غير صحيحة هي أحد أكثر أسباب الاختراق شيوعًا. القواعد:

# Connexion SSH au serveur
ssh user@moncite.com
cd /var/www/wordpress

# 1. Propriétaire = utilisateur web (souvent www-data)
sudo chown -R www-data:www-data .

# 2. Permissions directories : 755
find . -type d -exec chmod 755 {} \;

# 3. Permissions fichiers : 644
find . -type f -exec chmod 644 {} \;

# 4. wp-config.php : strict 600 (lecture seulement par owner)
chmod 600 wp-config.php

# 5. .htaccess : 644 (lisible mais pas exécutable)
chmod 644 .htaccess

# 6. uploads/ : 755 (lecture publique, écriture seulement par www-data)
chmod 755 wp-content/uploads

# 7. Vérifier qu'aucun fichier n'est en 777
find . -perm 777 -type f
find . -perm 777 -type d

على استضافة مشتركة، الصلاحيات الافتراضية أحيانًا 755 لكل شيء، مما يفتح الباب لاختراق متعدد المواقع (cross-account). اطلب من المُضيف عزل suEXEC أو bunker. على VPS مخصص (Hetzner، DigitalOcean)، تحكم كامل لك.

الخطوة 4 — Wordfence أو Solid Security

plugin أمان رئيسي إلزامي. اختياران مُتميّزان في 2026:

Wordfence (Free + Premium 119 USD/سنة) — الأكثر شعبية، WAF نشطة، Malware Scanner، Live Traffic. مُوصى به للمواقع متوسطة الحركة.

# Wordfence configuration recommandée

// Firewall
Web Application Firewall: Enabled and Protecting
Brute Force Protection: ON
- Lock out after how many login failures: 5
- Lock out after how many forgot password attempts: 3
- Count failures over what time period: 5 minutes
- Amount of time a user is locked out: 60 minutes
- Immediately lock out invalid usernames: YES
- Don't let WordPress reveal valid users in login errors: YES
- Prevent users registering 'admin' username: YES

// Scan
Scan Frequency: Daily
- Scan signed plugins/themes: YES
- Scan files outside WordPress: YES
- Scan wp-admin: YES
- Check for unsafe content: YES

// Login Security
Two-Factor Authentication: enable for all admins
Captcha on login form: ON

Solid Security (مجاني + Pro 99 USD/سنة) — معروف سابقًا كـ iThemes Security، API أنظف، قواعد مُسبَقة أكثر. Mُوصى به للمستخدمين الذين يريدون « tick the boxes » للحصول على hardening سريع.

الخطوة 5 — Two-Factor Authentication (2FA)

2FA يحوّل الـ password المسرّب من بطاقة دخول مجانية إلى عائق حقيقي. ثلاثة خيارات:

// Option 1 : Wordfence 2FA (intégré)
// Users → Two-Factor Authentication
// Scan QR code dans Google Authenticator/Authy
// Activer pour TOUS les comptes admin (obligatoire)

// Option 2 : Plugin dédié "Two Factor" (par WP Core team)
// Léger, propre, sans dépendance
wp plugin install two-factor --activate

// Option 3 : WP 2FA (Melapress)
// Plus complet : SMS, email, app, U2F
// Pro version avec policies forcées

// Pour les comptes admin : 2FA OBLIGATOIRE
// Pour authors/editors : 2FA RECOMMANDÉ
// Pour subscribers : optionnel

التطبيق المُوصى به للحصول على codes: Aegis Authenticator (Android، open-source) أو Raivo OTP (iOS، open-source). تجنّب Google Authenticator القديم — لا backup سحابي، إذا فقدت الجهاز فقدت الوصول.

للموقف الكارثي حيث فقدت Authenticator: backup codes. Wordfence يُولّد 5 codes احتياطية عند الإعداد — اطبعها واحفظها في خزينة فعلية.

الخطوة 6 — Login: تأمين wp-login.php

wp-login.php هو الباب الرئيسي. أربع طبقات حماية:

// 1. Cacher wp-login : plugin "WPS Hide Login"
// wp-admin → Settings → WPS Hide Login
// Login URL: /mon-login-secret
// Redirection: /404

// 2. Limit Login Attempts (intégré Wordfence/Solid)
// OU plugin "Limit Login Attempts Reloaded"

// 3. CAPTCHA sur login form
// Wordfence : ON automatiquement après N échecs
// reCAPTCHA v3 plugin pour validation invisible

// 4. .htaccess : protéger wp-admin par IP (si IP fixe)
<Files "wp-login.php">
    Require ip 196.123.45.67   # ton IP fixe
    Require ip 102.0.0.0/8     # plage de ton FAI
</Files>

// OU protéger par mot de passe HTTP (deuxième couche)
// Créer /home/user/.htpasswd avec htpasswd -c
<Files wp-login.php>
    AuthType Basic
    AuthName "Admin Access"
    AuthUserFile /home/user/.htpasswd
    Require valid-user
</Files>

للوكالات التي تُدير عدة مواقع، استخدام WPS Hide Login + Limit Login + 2FA يُلغي عمليًا brute-force WordPress. الـ logs Wordfence تُظهر محاولات مهاجمين تنفجر إلى صفر بعد إعداد سليم.

الخطوة 7 — Scan وكشف malware

كشف اختراق مبكر يقلّل الضرر. ثلاث أدوات:

// 1. Wordfence Scan (quotidien)
// Detecte:
//  - core/plugin/theme files modifiés (différence vs hash officiel)
//  - signatures malware connues
//  - URLs suspectes dans content
//  - backdoors PHP cachées

// 2. Sucuri SiteCheck (gratuit, externe)
// https://sitecheck.sucuri.net
// Scan externe sans installation

// 3. ImunifyAV (sur cPanel/Plesk)
// Si dispo chez ton hébergeur, activer
// Scan complet du filesystem

// Commande manuelle SSH : trouver fichiers PHP suspects récents
find /var/www/wordpress -name "*.php" -newer /tmp/marker -type f
# Créer marqueur avant install propre :
touch /tmp/marker

# Recherche backdoors classiques
grep -rE "eval\s*\(base64_decode|gzinflate|str_rot13" /var/www/wordpress/wp-content/

إذا كشف scan فايل مشبوه: لا تحذف فورًا. خذ نسخة احتياطية، حلّل بـ VirusTotal، ابحث في Wordfence Threat Defense Feed. أحيانًا « malware » مُعلَن هو false positive من plugin شرعي.

الخطوة 8 — نسخ احتياطية وخطة recovery

الـ backup هو الحبل الأخير. ثلاث استراتيجيات:

# Option 1 : UpdraftPlus (gratuit, le plus populaire)
// Configuration recommandée :
// - Files: quotidien, conservation 7 jours
// - Database: 4x/jour, conservation 14 jours
// - Destination: Google Drive OU Backblaze B2 (1 TB ~6 USD/mois)

# Option 2 : BackWPup (gratuit)
// Plus de personnalisation, formats variés (SQL, XML, ZIP, TAR.GZ)

# Option 3 : Backup serveur (mieux pour gros sites)
// VPS Hetzner : snapshots quotidiens automatiques (1 EUR/mois)
// + rsync vers serveur secondaire

# Test de restoration (CRITIQUE - faire 1x/trimestre)
# 1. Provisionner un VPS test
# 2. Restaurer le backup complet
# 3. Vérifier que tout fonctionne
# 4. Documenter le temps RTO (Recovery Time Objective)

# Sans test, ton backup n'existe pas

القاعدة الذهبية: 3-2-1. 3 نسخ من البيانات. 2 وسائط مختلفة. 1 خارج الموقع. عمليًا: backup يومي + سحابة + snapshot الخادم. لا تثق في backup لم تختبر استعادته فعلًا.

أخطاء شائعة

الخطأ السبب الحل
Plugins خاملة لكنها مُثبَّتة كسل تنظيف احذف plugins غير نشطة (سطح هجوم إضافي)
Nulled plugins/themes اقتصاد قصير المدى الـ Nulled = backdoor مُضمَّن في 80% من الحالات. اشترِ ترخيصًا حقيقيًا
كلمات مرور admin ضعيفة « admin123 » password manager (Bitwarden) + 20 حرف عشوائية
WordPress قديم 3+ أشهر إهمال تحديثات auto-update minor + monitoring تنبيه على major
2FA معطّل على admin « مزعج » 2FA إلزامي. مزعج 30 ثانية، يُجنّب كارثة 30 ساعة
خادم مع PHP 7.4 أو أقدم إصدارات منتهية الحياة ترقية لـ PHP 8.3 LTS فورًا

الأسئلة الشائعة

Wordfence أم Solid Security؟
كلاهما ممتاز. Wordfence إذا تريد WAF نشطة وtraffic logs. Solid Security إذا تريد UI أنظف وإعداد أسرع. لا تُثبّت الاثنين معًا.

هل يكفي SSL/HTTPS للأمان؟
لا. HTTPS يُشفّر النقل لكن لا يحمي من brute-force، plugin معطوب، أو password سيء. SSL ضروري لكن بعيد عن كافٍ.

كم مرة أُحدّث WordPress؟
Auto-update minor تلقائيًا. Major (6.7 → 6.8) في غضون أسبوع من الإصدار، بعد اختبار في staging. Plugins/themes: أسبوعيًا.

كيف أكتشف اختراقًا؟
علامات: 503 errors عشوائية، إعادة توجيهات غريبة، spam في عناوين قديمة، Google Search Console يُنذِر، Wordfence scan يحذّر.

ماذا أفعل إذا اخترق موقعي؟
1) عطّل الموقع فورًا (mode maintenance). 2) استعد من backup قبل العدوى. 3) غيّر كل كلمات المرور وsalts. 4) فحص كامل بـ Wordfence. 5) صحّح الثغرة الأصلية. 6) أبلغ المضيف.

مقالات ذات صلة

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité