it-swarm.com.de

Der beste Weg, um xmlrpc.php zu beseitigen?

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

24
prosti

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
5

Am besten deaktivieren Sie xmlrpc.php-Funktionen mit einem Plugin, 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.

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

Diese Plugins haben die gleiche Funktion wie die functions.php-Datei des Themas oder das Hinzufügen einer order,allow deny-Regel zu .htaccess (wie in anderen Antworten beschrieben), mit dem Unterschied, dass ein Plugin oder eine Funktion Aufrufe von xmlrpc.php über PHP und die Regel in deaktiviert .htaccess nutzt 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.

4
markratledge

Für die extreme Minderheit, die WordPress in IIS hostet, können Sie das URL-Rewrite-Modul IIS verwenden, um ähnliche htaccess-ähnliche Einschränkungen vorzunehmen. Im 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 auf IPs, die keine Whitelist sind, mit HTTP 404 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>
3
BRass

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_enabled-Filter 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 Filter xmlrpc_methods, 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 -Anforderung 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
3
tweber

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 alle 15 Minuten einen Blockierungsversuch an.

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.

Wordfencehttps://www.wordfence.com/

0
Steve

Zunächst können Sie den Code add_filter('xmlrpc_enabled', '__return_false'); in die Datei functions.php oder in 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

0
yaser hamzeloy

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;
}
0
Manuel K