web-dev-qa-db-fra.com

Meilleur moyen d’éliminer xmlrpc.php?

Quelle est la meilleure façon d’éliminer le fichier xmlrpc.php de WordPress lorsque vous n’en avez pas besoin?

24
prosti

Nous utilisons le fichier htaccess pour le protéger des pirates.

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
5

La meilleure chose à faire est de désactiver les fonctions xmlrpc.php avec un plugin plutôt que de supprimer ou de désactiver le fichier lui-même. Le fichier lui-même sera remplacé sur les mises à jour principales de WordPress, tandis qu'un plug-in le gardera désactivé après les mises à jour principales et si vous changez de thème.

Voir https://wordpress.org/plugins/search.php?q=disable+xml-rpc pour différents plugins. Ils ont tous des différences mineures.

Ces plugins font la même chose qu'une fonction ajoutée au fichier functions.php du thème ou qu'une règle order,allow deny est ajoutée à .htaccess (comme indiqué dans d'autres réponses), la différence étant qu'un plugin ou une fonction désactive les appels à xmlrpc.php via PHP, et la règle dans .htaccess fonctionne en utilisant mod_rewrite sur le serveur Web (Apache ou Nginx). Il n'y a pas de différence de performances appréciable entre PHP et mod_rewrite sur un serveur moderne.

4
markratledge

Pour l'extrême minorité hébergeant WordPress dans IIS, vous pouvez utiliser le module IIS URL Rewrite pour appliquer des restrictions similaires à celles utilisées pour htaccess. L'exemple ci-dessous suppose que la véritable adresse IP du client arrive dans l'en-tête X-Forwarded-For, que l'adresse IP de liste blanche connue est 55.55.555.555 et que vous souhaitez répondre avec un IP HTTP 404 aux adresses non-liste blanche.

<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>
3
BRass

Lorsque vous avez la possibilité de le bloquer via la configuration de votre serveur Web, les suggestions de @Charles sont bonnes.

Si vous ne pouvez le désactiver qu'avec php, le filtre xmlrpc_enabled n'est pas le bon choix. Comme documenté ici: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ il désactive uniquement les méthodes xml rpc nécessitant une authentification.

Utilisez plutôt le filtre xmlrpc_methods pour désactiver toutes les méthodes:

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

Vous pouvez tester son fonctionnement en envoyant une demande POST à xmlrpc.php avec le contenu suivant:

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

Si le filtre fonctionne, il ne devrait rester que 3 méthodes:

<?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>

vous pouvez le tester rapidement avec 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
3
tweber

J'ai récemment installé Wordfence qui, à partir de la version 6.3.12, peut bloquer l'accès direct à n'importe quel emplacement. L'ajout de /xmlrpc.php à la page Options de la liste des adresses IP d'accès interdites "Bloquer immédiatement les adresses IP accédant à ces URL" indique désormais qu'une tentative est bloquée toutes les 15 minutes.

Cela a également l’avantage de pouvoir bloquer une URL pour échapper à ces robots qui reviennent avec une adresse IP différente, encore et encore.

Je ne sais pas s'il permet l'utilisation de xmlrpc.php par Apps pour des opérations valides.

J'ai eu quelques problèmes avec la production de 504 Timeout et 502 Bad Gateway erreurs sur le serveur au début, mais cela semble s'être calmé.

Très impressionné par le résultat obtenu jusqu’à présent, il produit un profil de nettoyage précieux après le piratage du site avant l’installation de Wordfence et malgré le fait de toujours disposer de la dernière version de WordPress et de ses plugins.

Wordfencehttps://www.wordfence.com/

0
Steve

De la première façon, vous pouvez mettre le code add_filter('xmlrpc_enabled', '__return_false'); dans le fichier functions.php ou le plugin spécifique au site. Il est clairement recommandé de le placer dans un site spécifique plutôt que de modifier le fichier functions.php.

et d’autres moyens d’éliminer xmlrpc

0
yaser hamzeloy

j'utilise pour Nginx ce petit code et cela fonctionne à 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
0
Manuel K