¿La mejor manera de eliminar xmlrpc.php?

21

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

    
pregunta prosti 03.03.2016 - 19:48

8 respuestas

24

Desde WordPress 3.5, esta opción ( XML-RPC ) está habilitada de forma predeterminada, y la capacidad de desactivarlo desde WordPress dashboard se ha ido.

Agregue este fragmento de código para usar en functions.php :

// Disable use XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Disable X-Pingback to header
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 golpearlo.
Es mejor que utilices el siguiente fragmento de código en tu archivo .htaccess .

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

O use esto para deshabilitar el acceso al archivo xmlrpc.php del bloque del servidor NGINX.

# nginx block xmlrpc.php requests
location /xmlrpc.php {
    deny all;
}
  

Tenga en cuenta que la desactivación también puede tener un impacto en los inicios de sesión a través del móvil. Si estoy en lo correcto, la aplicación móvil de WordPress necesita esto.
  Consulte Codex para obtener más información sobre el uso de XML-RPC .

     
  • Realice siempre una copia de seguridad de los archivos antes de editar / agregar.
  •   

Editar / Actualizar

@Prosti, -¡Estás absolutamente en lo cierto, sobre las opciones que RESTful API ofrecerá para WordPress!

Olvidé mencionar esto. Ya debería haberse integrado en el núcleo ( WordPress versión 4.1 ) que no era posible en ese momento. Pero como parece, será central en WordPress 4.5.

La alternativa por el momento es este complemento: API REST de WordPress (Versión 2)
Puede usarlo hasta que Restful API también sea básico para WordPress.
Fecha objetivo para el lanzamiento de WordPress 4.5. (12 de abril de 2016 (+ 3w))

  

Para aquellos que estén interesados en RESTful , en Stackoverflow es una wiki de comunidad muy agradable.

    
respondido por el Charles 04.03.2016 - 00:22
4

Estamos utilizando el archivo htaccess para protegerlo de piratas informáticos.

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
    
respondido por el Jorin van Vilsteren 03.03.2016 - 20:34
4

Lo mejor que puede hacer es deshabilitar las funciones xmlrpc.php con un complemento en lugar de eliminar o deshabilitar el archivo en sí. El archivo en sí será reemplazado en las actualizaciones principales de WordPress, mientras que un complemento lo mantendrá deshabilitado después de las actualizaciones principales y si cambia de tema.

Consulte enlace para conocer los diferentes complementos. Todos ellos tienen pequeñas diferencias.

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

    
respondido por el markratledge 03.03.2016 - 20:35
3

Para la minoría extrema que aloja WordPress en IIS, puede usar el módulo IIS URL Rewrite para hacer restricciones similares similares a htaccess. El siguiente ejemplo asume que la verdadera IP del cliente viene en el encabezado X-Forwarded-For, la IP de la lista blanca conocida es 55.55.555.555, y que desea responder con un HTTP 404 a las IP que no son de 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="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>
    
respondido por el BRass 20.09.2016 - 18:03
2

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

Si solo puedes deshabilitarlo usando php, el filtro xmlrpc_enabled no es el correcto. Como se documenta aquí: enlace solo deshabilita los métodos xml rpc que requieren autenticación.

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

// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
    return [];
}, PHP_INT_MAX);

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

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

Si el filtro está funcionando, solo deben 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>
    
respondido por el tweber 09.04.2018 - 09:56
0

De la primera manera, puede colocar el código add_filter('xmlrpc_enabled', '__return_false'); en el archivo functions.php o el complemento específico del sitio. Claramente, ponerlo en un sitio específico es más recomendable que editar el archivo functions.php .

y otras formas de eliminar xmlrpc

    
respondido por el yaser hamzeloy 13.06.2017 - 15:30
0

Recientemente he instalado Wordfence que, a partir de la versión 6.3.12 tiene la capacidad de bloquear el acceso directo a cualquier ubicación. Poner /xmlrpc.php en la página de Opciones en la lista de direcciones IP de acceso prohibidas "Bloquear inmediatamente las direcciones IP que acceden a estas URL" ahora muestra un intento de bloqueo cada 15 minutos.

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

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

Al principio tuve algunos problemas al producir 504 Timeout y 502 Bad Gateway errores en el servidor, pero parece haberse solucionado.

Muy impresionado con el resultado hasta el momento y produjo un valioso perfil de limpieza después de que el sitio fuera hackeado antes de instalar Wordfence y, a pesar de tener siempre la última versión de WordPress y los complementos.

Wordfence enlace

    
respondido por el Steve 15.07.2017 - 20:16
0

Yo uso para nginx este pequeño Código 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;
}
    
respondido por el Manuel K 26.11.2018 - 11:54

Lea otras preguntas en las etiquetas