¿Qué es xmlrpc.php y cómo lo desactivo en WordPress?
Por Eureka Studio · Actualizado
Respuesta corta
XML-RPC permite que las apps inicien sesión en WordPress a través de xmlrpc.php, una puerta aparte que ocultar wp-login.php no cierra. Desactivarlo es seguro salvo que uses Jetpack o la app móvil de WordPress. Bloquea el archivo en .htaccess, añade el filtro xmlrpc_enabled o usa un plugin que cierre el acceso por XML-RPC manteniendo los pingbacks. Después, compruébalo.
Pasos
1Paso 1
Comprueba si xmlrpc.php responde
Visita tusitio.com/xmlrpc.php. Si ves «XML-RPC server accepts POST requests only.», la puerta está abierta.
2Paso 2
Entiende por qué importa
El Análisis de superficie de Hushfort lo prueba de verdad. En un sitio abierto informa de que se pueden probar contraseñas saltándose la ruta de acceso oculta, y de que system.multicall permite meter cientos de intentos en una sola petición.

3Paso 3
Elige hasta dónde cerrarlo
Abre Hushfort → Blindaje de superficie y activa «Activar el blindaje de superficie». XML-RPC empieza en «Desactivar el acceso, mantener los pingbacks (recomendado)», que encaja con la mayoría de los sitios. «Desactivar por completo» es lo más estricto, pero deja sin funcionar Jetpack y la app móvil oficial. Pulsa Guardar cambios.

4Paso 4
Comprueba que se rechaza el acceso por XML-RPC
De vuelta en el Resumen, pulsa Volver a analizar. La línea de XML-RPC debería decir ahora «Acceso desactivado: se rechazan los intentos de contraseña y los pingbacks siguen funcionando.»

Por qué importa
XML-RPC es una antigua interfaz de control remoto de WordPress. Antes de que existiera la API
REST, era la forma en que los editores de escritorio y las apps móviles publicaban entradas.
Sigue incluido en todos los sitios WordPress, en /xmlrpc.php, y sigue aceptando un nombre de
usuario y una contraseña con cada petición.
Eso lo convierte en una segunda puerta de acceso. Ocultar wp-login.php no la toca. El
código de límite de accesos que solo vigila el formulario de acceso no la ve. Y con
system.multicall, una sola petición HTTP puede llevar cientos de intentos de contraseña. Un
límite que cuenta peticiones ve un intento donde hubo quinientos.
No es teoría. Creamos esta capa después de que una tienda siguiera recibiendo intentos de contraseña a través de XML-RPC cuando su página de acceso ya estaba oculta.
¿Usas XML-RPC? Probablemente no, si no te ocurre nada de esto:
- Conectas el sitio a Jetpack.
- Publicas o moderas desde la app móvil oficial de WordPress.
- Usas una herramienta de blogging de escritorio antigua, o un servicio que te pide tu nombre de usuario y contraseña de WordPress (en lugar de una contraseña de aplicación) para publicar en tu nombre.
- Dependes de los pingbacks de otros blogs.
Si no estás seguro, cierra solo el acceso y mantén los pingbacks. Así eliminas el riesgo de que adivinen contraseñas y dejas en su sitio las partes inofensivas. Siempre puedes endurecerlo más adelante.
Errores habituales
- Ocultar el acceso y quedarse ahí. Los intentos de adivinar contraseñas simplemente se
trasladan a
xmlrpc.php. - Bloquear el archivo entero sin comprobar. Jetpack y la app móvil oficial de WordPress se conectan por XML-RPC. Si los usas, cierra solo los métodos de acceso o haz pruebas con cuidado.
- Fiarse de un interruptor sin probarlo. Algunos métodos dejan partes de XML-RPC respondiendo. Comprueba siempre el resultado con una petición real (consulta el paso 4 o comprueba qué expone tu sitio).
- Olvidar la capa de caché. Si una regla de la CDN ya bloquea
xmlrpc.php, un ajuste a nivel de WordPress no mostrará ningún efecto. No pasa nada; solo tienes que saber qué capa está haciendo el trabajo.
Sin plugin
Opción 1: el filtro xmlrpc_enabled. Añade esto a un pequeño plugin de uso obligatorio
(wp-content/mu-plugins/no-xmlrpc-login.php) o al functions.php de tu tema hijo:
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );
Esto desactiva los métodos de XML-RPC que requieren iniciar sesión. Los pingbacks siguen
funcionando porque no lo necesitan. Por sí solo no elimina system.multicall, y el archivo
sigue respondiendo a las peticiones. Para quitar también el método multicall:
<?php
add_filter( 'xmlrpc_methods', function ( $methods ) {
unset( $methods['system.multicall'] );
return $methods;
} );
Opción 2: bloquear el archivo en el servidor. En Apache, en .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
En Nginx: location = /xmlrpc.php { deny all; }. Es la opción más estricta y no le cuesta nada
al servidor, pero también acaba con los pingbacks, Jetpack y la app móvil, y vive fuera de
WordPress, así que es fácil olvidarla cuando cambias de hosting.
Si algo sale mal
- Jetpack muestra un error de conexión. Jetpack necesita XML-RPC. Cambia de «Desactivar por completo» a «Desactivar el acceso, mantener los pingbacks», o quita tu regla del servidor.
- La app móvil de WordPress no puede acceder. La misma causa. O usas el navegador en el móvil, o permites el acceso por XML-RPC y confías en los límites de acceso más la autenticación de dos factores.
- Una herramienta de publicación ha dejado de publicar. Comprueba si usa XML-RPC. La mayoría de las herramientas modernas se han pasado a la API REST con contraseñas de aplicación.
Con Hushfort
El Cierre de la puerta trasera forma parte de Hushfort Pro. El Análisis de superficie, que muestra si XML-RPC está abierto, está en Hushfort Security, el plugin de seguridad gratuito para WordPress.
El Cierre de la puerta trasera forma parte de la capa de Blindaje de superficie de Hushfort. Te ofrece cuatro opciones:
- Desactivar el acceso, mantener los pingbacks (recomendado): adivinar contraseñas por XML-RPC se vuelve imposible, mientras los pingbacks y trackbacks siguen funcionando. Encaja bien en tiendas online.
- Desactivar por completo: la opción más estricta. Jetpack y la app móvil oficial no pueden conectarse.
- Desactivar solo system.multicall: cierra los intentos masivos y deja el resto como está.
- No cambiar: el comportamiento predeterminado de WordPress.
Después, el Análisis de superficie comprueba el resultado con peticiones reales, para que veas
lo que ve alguien de fuera. La Protección de carga, además, cobra más por las peticiones a
xmlrpc.php que por una visita normal a una página, lo que frena el ruido que quede.
Preguntas frecuentes
¿Es seguro desactivar XML-RPC en WordPress?
¿Ocultar la página de acceso también oculta xmlrpc.php?
¿Qué es system.multicall?
¿Desactivar XML-RPC rompe los pingbacks?
¿El filtro xmlrpc_enabled desactiva XML-RPC por completo?
Guías relacionadas
¿Cómo reviso la seguridad de mi web WordPress y compruebo qué deja al descubierto?
Revisa la seguridad de tu web WordPress como lo haría un bot: cinco peticiones muestran si el acceso, XML-RPC y tus nombres de usuario están expuestos.
Ver los pasos¿Cómo limito los intentos de login (inicio de sesión) en WordPress?
Frena la fuerza bruta en WordPress bloqueando una IP tras unos pocos intentos de login fallidos: ajustes que funcionan, código manual y huecos a cerrar.
Ver los pasos¿Cómo cambio la URL de login (acceso) de WordPress y oculto wp-admin?
Cambia la URL de login de WordPress y oculta wp-admin en cinco pasos seguros. Prueba la nueva URL antes de cerrar sesión y aprende a volver a entrar.
Ver los pasos
