WordPress wp-admin 403 sur load-styles.php / load-scripts.php (Wordfence WAF / fichier auto prepend)
Résumé
Après une mise à jour WordPress ou plugin, certains sites voient soudainement un écran wp-admin cassé :
- Login fonctionne, mais le tableau de bord d'administration semble non-style, vide, ou demi-chargé.
- Navigateur DevTools → Affichages réseau 403 Interdit au lieu de:
wp-admin/load-styles.phpwp-admin/load-scripts.php
- Désactivation des plugins de wp-admin, ou même renommage
wp-content/plugins, fait pas réparer le 403.
Dans de nombreux cas, la cause fondamentale est Pare-feu pour applications Web Wordfence (WAF) toujours en cours de chargement via auto_prepend_file dans .htaccess et/ou .user.ini, même après que le plugin est désactivé.
Symptômes
- WordPress admin charge partiellement ou sans CSS/JS.
- Dans votre navigateur et vos outils DevTools → onglet réseau :
wp-admin/load-styles.phpet/ouwp-admin/load-scripts.phpmontrer 403 Interdit.
- Le journal des erreurs Apache affiche des lignes similaires à :
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-styles.php [authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-scripts.php - Renaming
wp-content/pluginsou désactivation des plugins du tableau de bord pas résoudre l'erreur.
Cause racine
Lorsque Wordfence WAF est activé dans Protection étendue mode, ce n'est pas seulement un plugin WordPress normal. Il s'injecte également dans PHP via auto_prepend_file.
Plus précisément, Wordfence :
- Ajoute un
auto_prepend_filedirective pour votre configuration PHP via:.htaccess(Apache).user.ini(par répertoire PHP paramètres)
- Il souligne que la directive relative à un fichier bootstrap, par exemple:
# In .htaccess php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php; In .user.ini auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
Ces forces chaque requête PHP (frontend, wp-admin, AJAX, cron, etc.) à charger wordfence-waf.php avant WordPress. Même si vous désactivez ou supprimez le plugin Wordfence, le bootstrap WAF peut quand même :
- Bloquer des chemins spécifiques (par exemple
load-styles.php,load-scripts.php,wp-cron.php), ou - Échec dû à un code obsolète/comparé après une mise à jour WordPress ou PHP.
Parce que cela fonctionne au niveau PHP / Apache, simplement désactiver le plugin dans wp-admin n'est pas suffisant.
Comment confirmer It’s Wordfence / auto prepend file
1. Vérifier les journaux d'erreurs Apache / PHP
Regardez dans votre journal d'erreur Apache virtuel ou global pour des lignes comme:
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-styles.php
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-scripts.php
Si vous voyez 403s sur ces paramètres de base WordPress et le plugin normal désactivant dos’t aide, suspectez WAF / auto prepend file.
2. Contrôle .user.ini dans la racine du document
- Via SSH ou gestionnaire de fichiers, allez à votre racine de site (par exemple
/home/USER/public_html). - Ouvrir
.user.iniet recherchez une ligne similaire à:auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
3. Contrôle .htaccess pour Wordfence WAF
- Dans le même répertoire, ouvrir
.htaccess. - Rechercher un bloc WAF Wordfence, par exemple :
# Wordfence WAF # <IfModule mod_php7.c> php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php # </IfModule>
Si ces derniers existent, Wordfence WAF est toujours injecté dans chaque requête PHP, même si le plugin est désactivé.
Correction: Désaffectation appropriée de Wordfence WAF
Avertissement : Seulement si vous avez l'intention de désactiver Wordfence WAF. Si vous voulez toujours Wordfence, utilisez sa propre interface utilisateur pour reconfigurer la protection étendue.
Step 1: Désactiver le plugin Wordfence (si possible)
- Connectez-vous à l'admin-wp.
- Allez à Greffons → Greffons installés.
- Désactiver Sécurité de Wordfence.
Si wp-admin est complètement cassé, vous pouvez sauter cette étape et aller directement à l'édition des fichiers.
Étape 2: Supprimer auto_prepend_file de .user.ini
- Dans votre racine de document WordPress, ouvrez
.user.ini. - Trouvez la ligne Wordfence :
auto_prepend_file = "/home/USER/public_html/wordfence-waf.php" - Commenter ou supprimer , par exemple:
; auto_prepend_file = "/home/USER/public_html/wordfence-waf.php" - Enregistrez le fichier.
Étape 3: Supprimer auto_prepend_file de .htaccess
- Dans le même répertoire, ouvrir
.htaccess. - Recherchez le bloc WAF Wordfence, par exemple:
# Wordfence WAF <IfModule mod_php7.c> php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php </IfModule> - Commenter ou supprimer :
# Wordfence WAF disabled # <IfModule mod_php7.c> # php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php # </IfModule> - Enregistrez le fichier.
Step 4: Effacer le cache opcode / redémarrer PHP (optionnel mais recommandé)
- Si vous utilisez PHP-FPM / LSAPI / FastCGI, redémarrez PHP-FPM ou LiteSpeed / Apache.
- Demandez également à votre fournisseur d'hébergement de supprimer l'opcache PHP pour ce compte.
Step 5: Test wp-admin
- Ouvrir
/wp-admin/dans votre navigateur. - Ouvrez le réseau DevTools →, puis rechargez la page.
- Vérifier :
wp-admin/load-styles.phpretours 200 OK.wp-admin/load-scripts.phpretours 200 OK.- L'interface d'administration est de nouveau normale (CSS/JS chargé).
Si vous avez précédemment ajouté des redéfinitions temporaires (par exemple, wp-admin/.htaccess que inconditionnellement permis ces fichiers), vous pouvez les supprimer une fois que tout fonctionne normalement.
Optionnel: Nettoyer les fichiers Wordfence
Si vous avez complètement fini avec Wordfence, vous pouvez également:
- Supprimer ou renommer :
wp-content/plugins/wordfence/wp-content/wflogs/(annuaire de l'historique)
- Supprimer
wordfence-waf.phpde votre document root s'il n'est plus référencé nulle part.
Prévenir les problèmes futurs
- Soyez conscient que les plugins de sécurité avec WAF / “Protection étendue” peuvent modifier:
.htaccess.user.ini- Comportement PHP global via
auto_prepend_file
- Désactiver le plugin du tableau de bord ne pas enlever automatiquement ces crochets de bas niveau.
- Si vous voyez étrange 403s ou “client nié par configuration du serveur” sur les fichiers WordPress de base comme
load-styles.php,load-scripts.phpouwp-cron.php, toujours vérifier pour:auto_prepend_filelignes en.user.iniet.htaccess.- Fichiers de bootstrap WAF restants tels que
wordfence-waf.php.
Résumé
Numéro: admin WordPress cassé, load-styles.php / load-scripts.php retour 403, même après avoir désactivé les plugins.
Cause: Wordfence WAF encore injecté via auto_prepend_file dans .htaccess / .user.ini, chargement wordfence-waf.php sur chaque demande et bloquer ces paramètres.
Correction :
- Désactiver le plugin Wordfence (si possible).
- Supprimer
auto_prepend_fileréférences àwordfence-waf.phpde.htaccesset.user.ini. - Rechargez PHP / Apache et retestez wp-admin — les 403s sur
load-styles.php/load-scripts.phpdevrait disparaître.