Respuestas:
Desde WordPress 3.5, esta opción ( XML-RPC
) está habilitada de forma predeterminada, y la capacidad de desactivarlo desde WordPress dashboard
ha desaparecido.
Agregue este fragmento de código para usarlo 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 use el siguiente fragmento de código en su .htaccess
archivo.
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
O use esto para deshabilitar el acceso al xmlrpc.php
archivo desde el 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 de dispositivos móviles. Si estoy en lo cierto, la aplicación móvil de WordPress necesita esto.
Ver Codex para más información sobre el uso deXML-RPC
.
- Haga siempre una copia de seguridad de los archivos antes de editar / agregar.
@Prosti, -Usted tiene toda la razón- acerca de 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á fundamental en WordPress 4.5.
La alternativa por el momento es este complemento: WordPress REST API (Versión 2)
Puede usarlo hasta Restful API
que también sea el núcleo de WordPress.
Fecha objetivo para el lanzamiento de WordPress 4.5. (12 de abril de 2016 (+ 3w))
Para aquellos que estén interesados
RESTful
, en Stackoverflow es una wiki comunitaria muy agradable.
X-Pingback
encabezado para publicación / página única. Tenemos que utilizar otro filtro para eliminar por completo: add_filter('pings_open', '__return_false', PHP_INT_MAX);
.
functions.php
perderá todo efecto al cambiar de tema. function.php
es solo para fines de diseño, ¡use un complemento!
=
falta un signo igual ( ) en la primera línea del código nginx conf allí. Esto funcionó para mí: location = /xmlrpc.php {
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 puede deshabilitarlo usando php, el xmlrpc_enabled
filtro no es el correcto. Como se documenta aquí:
https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/
solo deshabilita los métodos xml rpc que requieren autenticación.
En su lugar, use el xmlrpc_methods
filtro para deshabilitar todos los métodos:
<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
return [];
}, PHP_INT_MAX);
Puede probar si funciona enviando una solicitud POST a xmlrpc.php con el contenido siguiente:
<methodCall>
<methodName>system.listMethods</methodName>
</methodCall>
Si el filtro funciona, 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>
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://your-wordpress-site.com/xmlrpc.php
Estamos utilizando el archivo htaccess para protegerlo de los hackers.
# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
Lo mejor que puede hacer es deshabilitar las xmlrpc.php
funciones 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 los temas.
Consulte https://wordpress.org/plugins/search.php?q=disable+xml-rpc para conocer los diferentes complementos. Todos tienen diferencias menores.
Estos complementos hacen lo mismo que una función agregada al functions.php
archivo del tema o agregando una order,allow deny
regla a .htaccess (como se describe en otras respuestas), con la diferencia de que un complemento o función deshabilita las llamadas a xmlrpc.php
través de PHP, y la regla en .htaccess funciona aprovechando mod_rewrite en el servidor web (es decir, Apache o Nginx). No existe una diferencia de rendimiento apreciable entre el uso de PHP y mod_rewrite en un servidor moderno.
Para la minoría extrema que aloja WordPress en IIS, puede usar el módulo IIS URL Rewrite para hacer restricciones similares a las de htaccess. El siguiente ejemplo supone que la verdadera IP del cliente viene en el encabezado X-Fordered-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>
De la primera manera, puede poner el código add_filter('xmlrpc_enabled', '__return_false');
en el archivo functions.php
o en el complemento específico del sitio. Claramente, ponerlo en un sitio específico es más recomendable que editar el archivo functions.php
.
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. Poner /xmlrpc.php en la página de Opciones en la lista de direcciones IP de acceso prohibido "Bloquear inmediatamente las 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 vuelven con una dirección IP diferente una y otra vez.
No sé si permite el uso de xmlrpc.php por parte de las aplicaciones para operaciones válidas.
Al principio tuve algunos problemas con la producción de errores 504 Timeout y 502 Bad Gateway en el servidor, pero parece haberse calmado.
Muy impresionado con el resultado hasta ahora y produjo un valioso perfil de limpieza después de que el sitio fue pirateado antes de instalar Wordfence y a pesar de tener siempre la última versión de WordPress y complementos.
/xmlrpc.php
a una regla de seguridad que prohíbe las IP que acceden parece que podría bloquear el tráfico legítimo. Si un sitio con pingbacks habilitó enlaces a su sitio, ese sitio enviará una solicitud a esa URL e inmediatamente se bloqueará ... parece que podría causar problemas.