XML-RPC es un protocolo antiguo en WordPress que permite conexiones remotas, pero se ha convertido en un vector común de ataques de fuerza bruta y DDoS porque los bots envían miles de peticiones al archivo xmlrpc.php.
Desactivarlo reduce drásticamente el tráfico malicioso sin afectar funciones modernas como la app móvil de WordPress, que ya usa REST API.
Este tutorial te muestra 3 métodos sin plugins: código PHP, .htaccess y Nginx.
#¿Por qué desactivar XML-RPC?
- El método
system.multicallpermite ejecutar miles de intentos de login en una sola petición - Representa hasta el 40% del tráfico en sitios vulnerables según logs de seguridad
- Los plugins como Jetpack ya no dependen de él desde 2019
#Método 1: Desactivar con functions.php (Recomendado)
Accede a Apariencia → Editor de temas → functions.php y añade al final:
// Desactivar XML-RPC completamente
add_filter('xmlrpc_enabled', '__return_false');
// Opcional: también bloquear pingbacks
add_filter('xmlrpc_allow_anonymous_comments', '__return_false');Guarda cambios. Este método es el más limpio y no consume recursos extras.
#Método 2: Bloqueo con .htaccess (Apache)
Añade estas líneas en tu archivo .htaccess en la raíz de WordPress:
# Bloquear XML-RPC completamente
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
# También bloquear wp-trackback
<Files wp-trackback.php>
Order Deny,Allow
Deny from all
</Files>Versión moderna con mod_rewrite:
RewriteEngine On
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [L,R=444]#Método 3: Configuración Nginx
Añade en tu bloque server de Nginx:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 444;
}
location = /wp-trackback.php {
deny all;
return 444;
}Recarga Nginx: sudo nginx -t && sudo systemctl reload nginx.
#Verificar que funciona
- Visita
https://tudominio.com/xmlrpc.php→ Debe dar error 403/404 - En logs de errores busca «XML-RPC» → No más accesos
- Prueba login con app móvil → Debe funcionar normalmente
#¿Qué pasa si necesito XML-RPC?
Si usas publicación remota antigua, añade whitelisting por IP en .htaccess:
<Files xmlrpc.php>
Order Deny,Allow
Allow from TU.IP.ESPECIFICA
Deny from all
</Files>Nota: Reinicia Apache/Nginx tras cambios y haz backup antes de editar archivos.