Der beste Weg, um xmlrpc.php zu beseitigen?

25

Was ist der beste Weg, um die xmlrpc.php-Datei aus WordPress zu entfernen, wenn Sie sie nicht benötigen?

prosti
quelle

Antworten:

26

Seit WordPress 3.5 ist diese Option ( XML-RPC) standardmäßig aktiviert und es ist nicht mehr möglich, sie in WordPress auszuschalten dashboard.

Fügen Sie dieses Code-Snippet für folgende Zwecke hinzu 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;
}

Obwohl es tut, was es sagt, kann es intensiv werden, wenn eine Site angegriffen wird, indem es sie trifft.
Möglicherweise ist es besser, den folgenden Codeausschnitt in Ihrer .htaccessDatei zu verwenden.

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

Oder verwenden Sie diese Option, um den Zugriff auf die xmlrpc.phpDatei vom NGINX-Serverblock zu deaktivieren .

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

Beachten Sie, dass das Deaktivieren auch Auswirkungen auf die Anmeldung über das Handy haben kann. Wenn ich richtig bin, benötigt die mobile WordPress-App dies. Weitere Informationen zur Verwendung von finden
Sie unter CodexXML-RPC .

  • Bitte machen Sie immer ein Backup der Datei (en), bevor Sie sie bearbeiten / hinzufügen.


Bearbeiten / Aktualisieren

@Prosti, -Du bist absolut richtig- was die Optionen betrifft, RESTful APIdie für WordPress angeboten werden!

Ich habe vergessen, das zu erwähnen. Es sollte bereits in den Core ( WordPress Version 4.1 ) integriert sein, was zu diesem Zeitpunkt nicht möglich war. Aber wie es scheint, wird der Kern in WordPress 4.5 sein.

Die Alternative für den Moment ist dieses Plugin: WordPress REST API (Version 2)
Sie können es verwenden, bis Restful APIes auch für WordPress Kern ist.
Zieldatum für die Veröffentlichung von WordPress 4.5. (12. April 2016 (+ 3w))

Für diejenigen, die daran interessiert sind RESTful, gibt es auf Stackoverflow ein sehr schönes Community-Wiki.

Charles
quelle
2
Wenn ich richtig bin , benötigt die mobile WordPress-App dies - wahrscheinlich wird dies in Zukunft nicht mehr benötigt, sobald wir auf die RESTful-API von WordPress (WordPress 4.5)
umgestiegen sind
2
Für diejenigen, die noch X-PingbackHeader für einzelne Beiträge / Seiten erhalten. Wir brauchen einen anderen Filter verwenden , um es vollständig zu entfernen: add_filter('pings_open', '__return_false', PHP_INT_MAX);.
MinhTri
1
Wenn Sie solche Elemente hinzufügen, functions.phpverlieren Sie beim Ändern des Themas alle Auswirkungen. function.phpist nur für designzwecke, benutze ein plugin!
David
@ David, sicher, aber ppl dann besser mu-plugins Ordner verwenden, anstatt für ein solches Plugin zu machen. Wenn ppl eine Funktion wie diese benötigt / verwendet, hat sie das aus einem bestimmten Grund und möchte nicht, dass jemand (nicht einmal ein Administrator) die Option hat, ein Plugin zu deaktivieren.
Charles
=Anscheinend fehlt dort ein Gleichheitszeichen ( ) in der ersten Zeile des nginx conf-Codes. Das hat bei mir funktioniert: location = /xmlrpc.php {
Dave
5

Wir verwenden die htaccess-Datei, um sie vor Hackern zu schützen.

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

Wenn Sie die Möglichkeit haben, sie über die Konfiguration Ihres Webservers zu blockieren, sind die Vorschläge von @Charles gut.

Wenn Sie es nur mit PHP deaktivieren können, ist der xmlrpc_enabledFilter nicht der richtige Weg. Wie hier dokumentiert: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ deaktiviert nur XML-RPC-Methoden, die eine Authentifizierung erfordern.

Verwenden Sie stattdessen den xmlrpc_methodsFilter, um alle Methoden zu deaktivieren:

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

Sie können testen, ob es funktioniert, indem Sie eine POST-Anfrage mit folgendem Inhalt an xmlrpc.php senden:

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

Wenn der Filter funktioniert, sollten nur noch 3 Methoden übrig sein:

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

Sie können es schnell mit Locken testen:

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
Tweber
quelle
4

Das Beste ist, xmlrpc.phpFunktionen mit einem Plugin zu deaktivieren, anstatt die Datei selbst zu löschen oder zu deaktivieren. Die Datei selbst wird bei WordPress-Kernaktualisierungen ersetzt, während ein Plugin sie nach Kernaktualisierungen und beim Ändern von Themen deaktiviert hält.

Unter https://wordpress.org/plugins/search.php?q=disable+xml-rpc finden Sie verschiedene Plugins. Sie haben alle kleine Unterschiede.

Diese Plugins haben die gleiche Funktion wie eine der functions.phpDatei des Themas hinzugefügte Funktion oder das Hinzufügen einer order,allow denyRegel zu .htaccess (wie in anderen Antworten beschrieben), mit dem Unterschied, dass ein Plugin oder eine Funktion Aufrufe xmlrpc.phpüber PHP deaktiviert und die Regel in .htaccess funktioniert durch Nutzung von mod_rewrite auf dem Webserver (dh Apache oder Nginx). Es gibt keinen nennenswerten Leistungsunterschied zwischen der Verwendung von PHP und mod_rewrite auf einem modernen Server.

markratledge
quelle
3

Für die extreme Minderheit, die WordPress in IIS hostet, können Sie das IIS-URL-Rewrite-Modul verwenden, um ähnliche htaccess-ähnliche Einschränkungen vorzunehmen. In dem folgenden Beispiel wird davon ausgegangen, dass die wahre Client-IP im X-Forwarded-For-Header enthalten ist, die bekannte Whitelist-IP 55.55.555.555 lautet und dass Sie mit HTTP 404 auf nicht-Whitelist-IPs antworten möchten.

<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>
Messing
quelle
0

Zunächst können Sie den Code add_filter('xmlrpc_enabled', '__return_false');in die Datei functions.phpoder das ortsspezifische Plugin einfügen . Das eindeutige Einfügen in eine bestimmte Site ist empfehlenswerter als das Bearbeiten der Datei functions.php.

und andere Möglichkeiten, um xmlrpc zu beseitigen

yaser hamzeloy
quelle
0

Ich habe kürzlich Wordfence installiert, das ab Version 6.3.12 den direkten Zugriff auf jeden Ort blockieren kann. Das Setzen von /xmlrpc.php auf die Seite "Optionen" in der Liste der gesperrten Zugriffs-IPs "IPs, die auf diese URLs zugreifen, sofort blockieren" zeigt jetzt, dass alle 15 Minuten ein Versuch blockiert wird.

Dies hat auch den Vorteil, dass eine URL blockiert werden kann, um den nervigen Bots zu entkommen, die immer wieder mit einer anderen IP-Adresse zurückkehren.

Ich weiß nicht, ob es die Verwendung von xmlrpc.php durch Apps für gültige Vorgänge zulässt.

Ich hatte einige Probleme mit der Erzeugung von 504 Timeout- und 502 Bad Gateway-Fehlern auf dem Server, aber es scheint sich beruhigt zu haben.

Sehr beeindruckt vom bisherigen Ergebnis und es wurde ein wertvolles Bereinigungsprofil erstellt, nachdem die Site vor der Installation von Wordfence gehackt worden war und obwohl immer die neueste Version von WordPress und Plugins vorhanden war.

Wordfence https://www.wordfence.com/

Steve
quelle
Durch /xmlrpc.phpdas Hinzufügen einer Sicherheitsregel zum Verbot von IP-Adressen, auf die zugegriffen werden soll, könnte der legitime Datenverkehr blockiert werden. Wenn eine Site mit Pingbacks aktivierten Links zu Ihrer Site eine Anfrage an diese URL sendet und sofort blockiert wird ... scheint dies Probleme zu verursachen.
Adam-Asdf
0

Ich benutze für Nginx diesen kleinen Code und das funktioniert 100%

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