WordPress wp-admin 403 en load-styles.php / load-scripts.php (Wordfence WAF / auto prepend file)
Resumen
Después de una actualización de WordPress o plugin, algunos sitios de repente ver una pantalla wp-admin rota:
- Trabajos de inicio de sesión, pero el panel de administración parece sin estilo, en blanco o medio cargado.
- Browser DevTools → Network shows 403 Prohibido para:
wp-admin/load-styles.phpwp-admin/load-scripts.php
- Desactivar plugins de wp-admin, o incluso renombrar
wp-content/plugins, sí no Arregla el 403.
En muchos casos, la causa raíz es Wordfence Web Application Firewall (WAF) todavía siendo cargado a través de auto_prepend_file en .htaccess y/o .user.ini, incluso después de que el plugin esté deshabilitado.
Síntomas
- WordPress admin carga parcialmente o sin CSS/JS.
- In your browser’s DevTools → Network tab:
wp-admin/load-styles.phpy/owp-admin/load-scripts.phpshow 403 Prohibido.
- El registro de errores de Apache muestra líneas similares a:
[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/pluginso desactivar plugins del panel de control hace no resolver el error.
Causa de la raíz
Cuando Wordfence WAF está habilitado en Protección ampliada modo, no es sólo un plugin de WordPress normal. También se inyecta en PHP a través de auto_prepend_file.
Específicamente, Wordfence:
- Añada un
auto_prepend_filedirectiva a su configuración de PHP a través de:.htaccess(Apache).user.ini(Configuración PHP por directorio)
- Puntos que la directiva a un archivo de arranque como:
# 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"
Esta fuerza cada solicitud de PHP (frontend, wp-admin, AJAX, cron, etc.) para cargar wordfence-waf.php antes WordPress. Incluso si usted deshabilita o elimina el plugin de Wordfence, el bootstrap de WAF todavía puede:
- Bloquear caminos específicos (por ejemplo.
load-styles.php,load-scripts.php,wp-cron.php), o - Fail debido a códigos obsoletos/mermados después de una actualización de WordPress o PHP.
Porque esto se ejecuta en el nivel PHP / Apache, simplemente desactivar el plugin en wp-admin no es suficiente.
Cómo confirmarlo?
1. Chequee los registros de errores de Apache / PHP
Busque en su host virtual o registro de errores de Apache global para líneas como:
[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 usted ve 403s en estos puntos finales de WordPress núcleo y el desactivación de plugin normal hace sentirlos;t help, suspect WAF / auto prepend file.
2. Check .user.ini en la raíz del documento
- Via SSH o gestor de archivos, vaya a su raíz del sitio (por ejemplo
/home/USER/public_html). - Abierto
.user.iniy buscar una línea similar a:auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
3. Check .htaccess para Wordfence WAF
- En el mismo directorio, abierto
.htaccess. - Busque un bloque de Wordfence WAF, por ejemplo:
# Wordfence WAF # <IfModule mod_php7.c> php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php # </IfModule>
Si existen, Wordfence WAF sigue siendo inyectado en cada solicitud PHP, incluso si el plugin está desactivado.
Corrección: Properly Decommission Wordfence WAF
Advertencia: Sólo haz esto si tienes la intención de deshabilitar Wordfence WAF. Si todavía quieres Wordfence, utiliza su propia UI para reconfigurar Protección Extendida.
Step 1: Disable Wordfence plugin (if possible)
- Entra a wp-admin.
- Ve a Plugins → Plugins instalados.
- Desactivar Seguridad de Wordfence.
Si wp-admin está completamente roto, puede saltar este paso y ir directamente a los archivos de edición.
Step 2: Remove auto_prepend_file de .user.ini
- En su raíz de documento de WordPress, abierto
.user.ini. - Encuentra la línea Wordfence:
auto_prepend_file = "/home/USER/public_html/wordfence-waf.php" - Comentarlo o eliminarlo , por ejemplo:
; auto_prepend_file = "/home/USER/public_html/wordfence-waf.php" - Guarda el archivo.
Step 3: Remove auto_prepend_file de .htaccess
- En el mismo directorio, abierto
.htaccess. - Busque el bloque de Wordfence WAF, por ejemplo:
# Wordfence WAF <IfModule mod_php7.c> php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php </IfModule> - Comentar o eliminarlo:
# Wordfence WAF disabled # <IfModule mod_php7.c> # php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php # </IfModule> - Guarda el archivo.
Step 4: Clear opcode cache / restart PHP (optional but recommended)
- Si usted está usando PHP-FPM / LSAPI / FastCGI, reinicia PHP-FPM o LiteSpeed / Apache.
- Alternativamente, pida a su proveedor de alojamiento que despeje la opcache PHP para esa cuenta.
Step 5: Test wp-admin
- Abierto
/wp-admin/en su navegador. - Open DevTools → Network, then reload the page.
- Verificar:
wp-admin/load-styles.phpde retornos 200.wp-admin/load-scripts.phpde retornos 200.- La interfaz de administración se ve normal de nuevo (CSS/JS cargado).
Si usted añadiera previamente cualquier anulación temporal (por ejemplo, a wp-admin/.htaccess que permitieron incondicionalmente esos archivos), puede eliminarlos una vez que todo funciona normalmente.
Opcional: Limpiar archivos de Wordfence
Si usted está completamente hecho con Wordfence, también puede:
- Eliminar o renombrar:
wp-content/plugins/wordfence/wp-content/wflogs/(Directorio de registro)
- Retirar
wordfence-waf.phpdesde la raíz de su documento si ya no se hace referencia en ningún lugar.
Prevención de futuras cuestiones
- Tenga en cuenta que los plugins de seguridad con WAF / “Protección avanzada limitadardquo; puede modificar:
.htaccess.user.ini- Comportamiento global de PHP
auto_prepend_file
- Desactivar el plugin del panel de control no automáticamente eliminar estos ganchos de bajo nivel.
- Si usted ve extraños 403 o “client negado por configuración del servidor implicardquo; en archivos de WordPress núcleo como
load-styles.php,load-scripts.php, owp-cron.php, siempre busque:auto_prepend_filelíneas en.user.iniy.htaccess.- Archivo de arranque de WAF de sobra como
wordfence-waf.php.
Resumen
Cuestión: WordPress administración roto, load-styles.php / load-scripts.php volver 403, incluso después de desactivar plugins.
Causa: Wordfence WAF todavía inyectado a través de auto_prepend_file en .htaccess / .user.ini, carga wordfence-waf.php en cada solicitud y bloqueo de esos puntos finales.
Arregla:
- Incremento de Wordfence deshabilitado (si es posible).
- Retirar
auto_prepend_filereferencias awordfence-waf.phpde.htaccessy.user.ini. - Recarga PHP / Apache y retest wp-admin — los 403 en
load-styles.php/load-scripts.phpDebería desaparecer.