Développement web

Bloquer le XML-RPC sur WordPress

Par Pierre, le mars 29, 2021 - 2 min read

XML-RPC permet la communication entre WordPress et d’autres systèmes. Présent depuis les débuts de WordPress, il a été utilisé entre autres pour les échanges avec l’application mobile, avec d’autres plateformes de blogging ou l’extension tout-en-un JetPack. L’API REST a remplacé le XML-RPC. Ce dernier n’est donc plus utile et il est préférable de la désactiver, surtout qu’il est sensible, du fait de ses spécificités, aux attaques en force brute et attaques DDoS. L’API REST est totalement stable depuis de nombreuses versions de WordPress. Le XML-RPC vit certainement ses derniers jours, il est devenu totalement obsolète.

Désactiver le XML-RPC avec une extension

Les modules suivants permettent de désactiver le xmlrpc.php. La première extension est dédiée uniquement à cette tâche.

Disable XML-RPC (de Philip Erb)
https://wordpress.org/plugins/disable-xml-rpc/

Disable xml-rpc plugin philip erb

Disable XML-RPC-API (de Neatmarketing)
https://wordpress.org/plugins/disable-xml-rpc-api/

Disable xml-rpc plugin

Cerber Security, Anti-spam & Malware Scan (de Cerber Tech Inc.)

wp cerber security anti spam

Clearfy (de Creative Motion)

Loginizer (de Softaculous) dans sa version pro

Désactiver le xmlrpc.php via le fichier .htaccess

Dans votre fichier .htaccess, il vous suffit d’ajouter le code suivant :

# BEGIN Disable XML-RPC request
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
# END Disable XML-RPC

Désactiver le xmlrpc.php sur votre serveur

Si vous êtes sur serveur Nginx, demandez à votre Sysadmin d’ajouter au fichier Nginx.config le code suivant :

# nginx block xmlrpc.php requests
location ~* ^/xmlrpc.php$ {
return 403;
}

Bloquer xmlrpc.php avec wp-config.php

Vous pouvez également ajouter un filtre à la fin du fichier wp-config.php. Le XML-RPC sera ainsi désactivé. Ajoutez le code ci-dessous juste après la dernière instruction `ABSPATH`:

add_filter('xmlrpc_enabled', '__return_false');

Désactiver le xmlrpc via le fichier function.php

Attention ce code n’a pas été vérifié dernièrement. A tester sur un site en développement.

add_filter(‘xmlrpc_enabled’, ‘__return_false’);
// Desactive x-pingback HTTP header
add_filter(‘wp_headers’, function($headers) {
unset($headers[‘X-Pingback’]);
return $headers;
});
// Desactive les pingbacks
add_filter( ‘xmlrpc_methods’, function( $methods ) {
unset( $methods[‘pingback.ping’] );
return $methods;
} );
remove_action( ‘wp_head’, ‘rsd_link’ );

Tester si le XML-RPC est bien désactivé

Une fois le module installé et paramétré ou une fois que vous avez utilisez une des autres méthodes, vous pourrez vérifier si le XML-RPC est bien bloqué sur le site suivant https://xmlrpc.eritreo.it/. Indiquez l’URL de votre site dans le champ Address puis cliquez sur Check. Si le XML-RPC est bien bloqué, vous obtiendrez le résultat suivant :

image 3

A noter qu’il n’est pas judicieux de juste effacer le fichier xmlrpc.php de votre dossier WordPress. Il est possible que cela provoque des erreurs sur votre site internet et le fichier réintégrera le code lors des différentes mises à jour.

Pierre