Mejor manera de eliminar xmlrpc.php

3 mar 2016, 20:48:38
Vistas: 40.2K
Votos: 33

¿Cuál es la mejor manera de eliminar el archivo xmlrpc.php de WordPress cuando no lo necesitas?

0
Todas las respuestas a la pregunta 9
5
33

Desde WordPress 3.5 esta opción (XML-RPC) está habilitada por defecto, y la capacidad de desactivarla desde el panel de control de WordPress ha desaparecido.

Añade este fragmento de código para usar en functions.php:

// Deshabilitar el uso de XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Deshabilitar X-Pingback en la cabecera
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );

    return $headers;
}

Aunque hace lo que dice, puede ser intensivo cuando un sitio está bajo ataque al ser golpeado.
Puede ser mejor usar el siguiente fragmento de código en tu archivo .htaccess.

# Bloquear solicitudes a xmlrpc.php en WordPress
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

O usa esto para deshabilitar el acceso al archivo xmlrpc.php desde el bloque de servidor NGINX.

# Bloquear solicitudes a xmlrpc.php en nginx
location /xmlrpc.php {
    deny all;
}

Ten en cuenta que deshabilitarlo también puede afectar a los inicios de sesión desde móviles. Si no me equivoco, la aplicación móvil de WordPress lo necesita.
Consulta el Codex para más información sobre el uso de XML-RPC.

  • Por favor, haz siempre una copia de seguridad de los archivos antes de editarlos o añadirles contenido.


Editar/Actualizar

@Prosti, -tienes toda la razón- sobre las opciones que la API RESTful ofrecerá para WordPress.

Olvidé mencionar esto. Debería haber sido integrado en el núcleo (versión 4.1 de WordPress), lo cual no fue posible en ese momento. Pero parece que será parte del núcleo en WordPress 4.5.

La alternativa por el momento es este plugin: WordPress REST API (Versión 2)
Puedes usarlo hasta que la API RESTful también sea parte del núcleo de WordPress.
Fecha objetivo para el lanzamiento de WordPress 4.5: (12 de abril de 2016 (+3 semanas))

Para aquellos interesados en RESTful, en Stackoverflow hay una muy buena wiki de la comunidad.

4 mar 2016 01:22:36
Comentarios

Si no me equivoco, la aplicación móvil de WordPress sí necesita esto - probablemente esto no será necesario en el futuro una vez que hayamos hecho la transición a la API RESTful de WordPress (WordPress 4.5)

prosti prosti
4 mar 2016 09:55:38

Para aquellos que todavía obtienen el encabezado X-Pingback para publicaciones/páginas individuales. Necesitamos usar otro filtro para eliminarlo completamente: add_filter('pings_open', '__return_false', PHP_INT_MAX);.

James Vu James Vu
10 ago 2016 20:02:02

Agregar cosas como esas al functions.php hará que pierdan todo efecto al cambiar de temas. function.php es solo para propósitos de diseño, ¡usa un plugin!

David David
20 sept 2016 14:07:24

@David, claro, pero la gente debería usar mejor la carpeta mu-plugins, en lugar de crear un plugin para esto. Cuando la gente necesita/usa una función como esta, lo hace por una razón y no quiere que nadie (ni siquiera un administrador) tenga la opción de desactivar un plugin.

Charles Charles
20 sept 2016 19:14:52

Parece que falta un signo de igual (=) en la primera línea del código de configuración de nginx. Esto funcionó para mí: location = /xmlrpc.php {

Dave Dave
7 feb 2017 21:45:56
0

Cuando tienes la capacidad de bloquearlo a través de la configuración de tu servidor web, las sugerencias de @Charles son buenas.

Si solo puedes deshabilitarlo usando PHP, el filtro xmlrpc_enabled no es la forma correcta. Como está documentado aquí: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ solo deshabilita los métodos XML-RPC que requieren autenticación.

En su lugar, usa el filtro xmlrpc_methods para deshabilitar todos los métodos:

<?php
// Deshabilitar todos los endpoints xml-rpc
add_filter('xmlrpc_methods', function () {
    return [];
}, PHP_INT_MAX);

Puedes probar si está funcionando enviando una petición POST a xmlrpc.php con el siguiente contenido:

<methodCall>
    <methodName>system.listMethods</methodName>
</methodCall>

Si el filtro está funcionando, solo deberían quedar 3 métodos:

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <string>system.multicall</string>
                        </value>
                        <value>
                            <string>system.listMethods</string>
                        </value>
                        <value>
                            <string>system.getCapabilities</string>
                        </value>
                    </data>
                </array>
            </value>
        </param>
    </params>
</methodResponse>

Puedes probarlo rápidamente con curl:

curl -X POST \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/xml' \
  -d '<methodCall><methodName>system.listMethods</methodName></methodCall>' \
  https://tu-sitio-wordpress.com/xmlrpc.php
9 abr 2018 10:56:49
0

Estamos utilizando el archivo htaccess para protegerlo de hackers.

# BEGIN proteger xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END proteger xmlrpc.php
3 mar 2016 21:34:38
0

Lo mejor es deshabilitar las funciones de xmlrpc.php con un plugin en lugar de eliminar o desactivar el archivo en sí. El archivo se reemplazará en las actualizaciones del núcleo de WordPress, mientras que un plugin mantendrá la desactivación después de las actualizaciones del núcleo y si cambias de tema.

Consulta https://wordpress.org/plugins/search.php?q=disable+xml-rpc para ver diferentes plugins. Todos tienen pequeñas diferencias.

Estos plugins hacen lo mismo que agregar una función al archivo functions.php del tema o agregar una regla order,allow deny al .htaccess (como se describe en otras respuestas), con la diferencia de que un plugin o función desactiva las llamadas a xmlrpc.php mediante PHP, y la regla en .htaccess funciona aprovechando mod_rewrite en el servidor web (es decir, Apache o Nginx). No hay una diferencia apreciable de rendimiento entre usar PHP y mod_rewrite en un servidor moderno.

3 mar 2016 21:35:46
0

Para la minoría extrema que está alojando WordPress en IIS, podrías utilizar el módulo de Reescribir URL de IIS para implementar restricciones similares a las de htaccess. El ejemplo siguiente asume que la IP real del cliente viene en la cabecera X-Forwarded-For, la IP conocida de la lista blanca es 55.55.555.555, y que deseas responder con un HTTP 404 a las IPs que no están en la lista blanca.

<rule name="wordpress-restrictions" enabled="true" stopProcessing="true">
    <match url="(^xmlrpc.php)|(^wp-admin)|(^wp-login.php)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
    </conditions>
    <action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="Archivo o directorio no encontrado" statusDescription="El recurso que estás buscando podría haber sido eliminado, haber cambiado de nombre o no estar disponible temporalmente." />
</rule>
20 sept 2016 19:03:51
0

La mejor manera es usar el archivo .htaccess para bloquear todas las solicitudes agregando

# Bloquear solicitudes a xmlrpc.php de WordPress
<Files xmlrpc.php>
order deny,allow
deny from all
allow from 1.1.1.1
</Files>

al final del archivo pero si quieres la forma más fácil usando el plugin Disable XML-RPC-API hará el trabajo.

21 ene 2021 09:45:39
1

Recientemente instalé Wordfence que, a partir de la versión 6.3.12, tiene la capacidad de bloquear el acceso directo a cualquier ubicación. Al agregar /xmlrpc.php en la página de Opciones en la lista de IPs con acceso prohibido "Bloquear inmediatamente las IPs que accedan a estas URLs", ahora muestra un intento bloqueado aproximadamente cada 15 minutos.

Esto también tiene la ventaja de poder bloquear una URL para escapar de esos bots molestos que regresan con una dirección IP diferente una y otra vez.

No sé si permite el uso de xmlrpc.php por parte de aplicaciones para operaciones válidas.

Al principio tuve algunos problemas con errores 504 Timeout y 502 Bad Gateway en el servidor, pero parece que se ha estabilizado.

Estoy muy impresionado con los resultados hasta ahora y generó un valioso perfil de limpieza después de que el sitio había sido hackeado antes de instalar Wordfence, a pesar de tener siempre la última versión de WordPress y los plugins.

Wordfence https://www.wordfence.com/

15 jul 2017 21:16:42
Comentarios

Agregar /xmlrpc.php a una regla de seguridad que prohiba las IPs que accedan a ella parece que podría bloquear tráfico legítimo. Si un sitio con pingbacks habilitados enlaza a tu sitio, ese sitio enviará una solicitud a esa URL y será bloqueado inmediatamente... parece que podría causar problemas.

adam-asdf adam-asdf
22 sept 2017 21:38:09
0

Yo uso este pequeño código para nginx y funciona al 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
26 nov 2018 12:54:23
0

Uso de un Plugin de Seguridad (Recomendado):

Una de las formas más sencillas de bloquear el acceso a xmlrpc.php en WordPress es utilizando un plugin de seguridad como Wordfence o Sucuri Security. Estos plugins suelen incluir opciones para bloquear XML-RPC o archivos específicos como xmlrpc.php.

Uso de Reglas en el Servidor (Apache)

<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
</Files>

Uso de Reglas en el Servidor (Nginx)

location ~* /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
    }

Reinicia tu Nginx

sudo systemctl reload nginx

Desactivar XML-RPC mediante wp-config.php:

define('XMLRPC_REQUEST', false);
9 oct 2023 17:12:46