Antworten:
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 .htaccess
Datei 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.php
Datei 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.
@Prosti, -Du bist absolut richtig- was die Optionen betrifft, RESTful API
die 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 API
es 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.
X-Pingback
Header 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);
.
functions.php
verlieren Sie beim Ändern des Themas alle Auswirkungen. function.php
ist nur für designzwecke, benutze ein plugin!
=
Anscheinend fehlt dort ein Gleichheitszeichen ( ) in der ersten Zeile des nginx conf-Codes. Das hat bei mir funktioniert: location = /xmlrpc.php {
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
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 xmlrpc_methods
Filter, 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
Das Beste ist, xmlrpc.php
Funktionen 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.php
Datei des Themas hinzugefügte Funktion 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 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.
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>
Zunächst können Sie den Code add_filter('xmlrpc_enabled', '__return_false');
in die Datei functions.php
oder das ortsspezifische Plugin einfügen . Das eindeutige Einfügen in eine bestimmte Site ist empfehlenswerter als das Bearbeiten der Datei functions.php
.
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.
/xmlrpc.php
das 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.