あなたがそれを必要としないときにWordPressからxmlrpc.phpファイルを排除するための最良の方法は何ですか?
ハッカーから保護するために、htaccessファイルを使用しています。
# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
ファイル自体を削除または無効にするのではなく、プラグインを使用してxmlrpc.php
関数を無効にすることをお勧めします。ファイル自体はWordPressのコアアップデートで置き換えられますが、コアアップデート後やテーマを変更した場合はプラグインによって無効にされます。
さまざまなプラグインについては https://wordpress.org/plugins/search.php?q=disable+xml-rpc を参照してください。それらはすべて小さな違いがあります。
これらのプラグインは、テーマのfunctions.php
ファイルに追加された関数、または.htaccessにorder,allow deny
ルールを追加するのと同じことを行いますが、プラグインまたは関数がPHPを介したxmlrpc.php
の呼び出しを無効にする点が異なります。 .htaccessはWebサーバ(すなわち、ApacheまたはNginx)でmod_rewriteを利用することによって機能します。最近のサーバーでPHPとmod_rewriteを使用しても、それほどパフォーマンスに違いはありません。
IISでWordPressをホスティングしている少数派にとっては、IIS URL Rewriteモジュールを使って同様のhtaccess風の制限をすることができます。以下の例では、本当のクライアントIPがX-Forwarded-Forヘッダーに入ってくることを想定しています。既知のホワイトリストIPは55.55.555.555で、非ホワイトリストIPにはHTTP 404で応答したいとします。
<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>
あなたのWebサーバの設定によってそれをブロックする能力があるとき、@カールの提案は良いです。
Phpでしか無効にできない場合は、xmlrpc_enabled
フィルタは適切ではありません。ここに文書化されているように: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ それは認証を必要とするxml rpcメソッドを無効にするだけです。
代わりにxmlrpc_methods
フィルタを使用してすべてのメソッドを無効にします。
<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
return [];
}, PHP_INT_MAX);
それが機能しているかどうかをテストするには、次のような内容のxmlrpc.phpにPOSTリクエストを送信します。
<methodCall>
<methodName>system.listMethods</methodName>
</methodCall>
フィルタが機能している場合は、3つのメソッドしか残っていないはずです。
<?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>
あなたはすぐに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
私は最近Wordfenceをインストールしました。バージョン6.3.12以降では、どの場所への直接アクセスもブロックすることができます。 /x - "禁止されているアクセスIPのリストのオプションページに/xmlrpc.phpを追加する "これらのURLにアクセスするIPを直ちにブロックする " は15分ごとにブロックされる試みを示しています。
これには、URLをブロックして、異なるIPアドレスで何度も何度も戻ってくる厄介なボットから逃れることができるという利点もあります。
私はそれが有効な操作のためにAppsによるxmlrpc.phpの使用を許可するかどうか知りません。
最初はサーバー上で504 Timeoutと502 Bad Gatewayのエラーが発生するという問題がいくつかありましたが、解決したようです。
これまでの結果に非常に感銘を受け、Wordfenceをインストールする前にサイトがハッキングされた後、常に最新バージョンのWordPressとプラグインがあるにもかかわらず、貴重なクリーンアッププロファイルが作成されました。
最初の方法では、コードadd_filter('xmlrpc_enabled', '__return_false');
をファイルfunctions.php
またはサイト固有のプラグインに入れることができます。 functions.php
ファイルを編集するよりも、サイト固有のものにすることをお勧めします。
私はnginxにこの小さなコードを使用し、これは100%動作します
location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}