Le meilleur moyen d'éliminer xmlrpc.php?

21

Quel est le meilleur moyen d'éliminer le fichier xmlrpc.php de WordPress quand vous n'en avez pas besoin?

    
posée prosti 03.03.2016 - 19:48

8 réponses

24

Depuis WordPress 3.5, cette option ( XML-RPC ) est activée par défaut et la possibilité de la désactiver à partir de WordPress dashboard a disparu.

Ajouter cet extrait de code à utiliser dans 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;
}

Bien qu'il fasse ce qu'il dit, il peut devenir intensif lorsqu'un site est attaqué en le frappant.
Vous feriez mieux d'utiliser l'extrait de code suivant dans votre fichier .htaccess .

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

Ou utilisez-le pour désactiver l'accès au bloc xmlrpc.php à partir du bloc de serveur NGINX.

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

Sachez que la désactivation peut également avoir un impact sur les connexions via mobile. Si je suis correct, l'application mobile WordPress en a besoin.
  Voir Codex pour plus d'informations sur l'utilisation de XML-RPC .

     
  • Faites toujours une copie de sauvegarde du ou des fichiers avant de modifier / ajouter.
  •   

Modifier / Mettre à jour

@Prosti, - Vous avez absolument raison - sur les options que RESTful API proposera pour WordPress!

J'ai oublié de mentionner ça. Il devrait déjà avoir été intégré dans le noyau ( WordPress version 4.1 ), ce qui n’était pas possible à cette époque. Mais il semble que ce soit fondamental dans WordPress 4.5.

L’alternative pour le moment est le plugin suivant: API WordPress REST (Version 2) . Vous pouvez l'utiliser jusqu'à ce que Restful API devienne également le cœur de WordPress.
Date cible pour la publication de WordPress 4.5. (12 avril 2016 (+ 3w))

  

Pour ceux qui sont intéressés par RESTful , sur le Stackoverflow est un très beau wiki de communauté.

    
réponse donnée Charles 04.03.2016 - 00:22
4

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

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
    
réponse donnée Jorin van Vilsteren 03.03.2016 - 20:34
4

La meilleure chose à faire est de désactiver xmlrpc.php des fonctions 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 enlace pour différents plug-ins. 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 un plugin ou une fonction qui désactive les appels à%.xmlrpc.php via PHP, et la règle dans .htaccess fonctionne en utilisant mod_rewrite sur le serveur Web (c'est-à-dire Apache ou Nginx). Il n'y a pas de différence de performance appréciable entre l'utilisation de PHP et de mod_rewrite sur un serveur moderne.

    
réponse donnée markratledge 03.03.2016 - 20:35
3

Pour l'extrême minorité hébergeant WordPress dans IIS, vous pouvez utiliser le module IIS URL Rewrite pour appliquer des restrictions similaires à celles de htaccess. L'exemple ci-dessous suppose que la véritable adresse IP du client figure 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 une adresse IP HTTP 404 à des adresses autres que de 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>
    
réponse donnée BRass 20.09.2016 - 18:03
2

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: enlace 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:

// 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>
    
réponse donnée tweber 09.04.2018 - 09:56
0

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

et d'autres moyens d'éliminer xmlrpc

    
réponse donnée yaser hamzeloy 13.06.2017 - 15:30
0

J'ai récemment installé Wordfence qui, à compter de la version 6.3.12, permet de 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 présente également l’avantage de pouvoir bloquer une URL pour échapper à ces bêtises 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 sur le serveur au début, mais cela semble s'être résorbé.

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.

Wordfence enlace

    
réponse donnée Steve 15.07.2017 - 20:16
0

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;
}
    
réponse donnée Manuel K 26.11.2018 - 11:54

Lire d'autres questions sur les étiquettes