Hushfort

¿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

  1. 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.

    tusitio.com/xmlrpc.php responde: XML-RPC server accepts POST requests only
  2. 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.

    Análisis de superficie en el Resumen de Hushfort: XML-RPC abierto, con system.multicall también abierto, y la lista de usuarios de REST y el escaneo de autores filtrando el nombre de usuario demo-admin
  3. 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.

    Blindaje de superficie activado, con XML-RPC en Desactivar el acceso, mantener los pingbacks (recomendado)
  4. 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.»

    Análisis de superficie después de la corrección: XML-RPC, lista de usuarios de REST, escaneo de autores y lista de autores del sitemap, todos cerrados

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?

Para la mayoría de los sitios, sí. El WordPress actual usa la API REST para el editor de bloques y la mayoría de las integraciones. XML-RPC lo siguen usando Jetpack, la app móvil oficial de WordPress y algunas herramientas de publicación antiguas, así que compruébalas antes.

¿Ocultar la página de acceso también oculta xmlrpc.php?

No. xmlrpc.php acepta nombres de usuario y contraseñas por su cuenta, así que los atacantes pueden seguir probando ahí después de que ocultes wp-login.php.

¿Qué es system.multicall?

Un método de XML-RPC que ejecuta muchas llamadas en una sola petición. Los atacantes lo usan para enviar cientos de contraseñas en una única petición, lo que se cuela por los límites que cuentan peticiones.

¿Desactivar XML-RPC rompe los pingbacks?

Bloquear el archivo entero, sí. Si solo cierras el acceso por XML-RPC y dejas abierto el método de pingback, los pingbacks y trackbacks siguen funcionando.

¿El filtro xmlrpc_enabled desactiva XML-RPC por completo?

No. Solo desactiva los métodos que requieren iniciar sesión. El archivo sigue respondiendo y las llamadas de pingback siguen funcionando. Suele ser lo que quieres, pero comprueba el resultado.

Informar de un error o pedir una función

Tu mensaje llega directamente al equipo que desarrolla Hushfort.

¿De qué se trata?

Solo lo usamos para responderte.

Usamos estos datos solo para responderte. Privacidad