web-dev-qa-db-ja.com

Xmlrpc.phpを排除するための最良の方法?

あなたがそれを必要としないときにWordPressからxmlrpc.phpファイルを排除するための最良の方法は何ですか?

24
prosti

ハッカーから保護するために、htaccessファイルを使用しています。

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

ファイル自体を削除または無効にするのではなく、プラグインを使用して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を使用しても、それほどパフォーマンスに違いはありません。

4
markratledge

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>
3
BRass

あなたの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
3
tweber

私は最近Wordfenceをインストールしました。バージョン6.3.12以降では、どの場所への直接アクセスもブロックすることができます。 /x - "禁止されているアクセスIPのリストのオプションページに/xmlrpc.phpを追加する "これらのURLにアクセスするIPを直ちにブロックする " は15分ごとにブロックされる試みを示しています。

これには、URLをブロックして、異なるIPアドレスで何度も何度も戻ってくる厄介なボットから逃れることができるという利点もあります。

私はそれが有効な操作のためにAppsによるxmlrpc.phpの使用を許可するかどうか知りません。

最初はサーバー上で504 Timeoutと502 Bad Gatewayのエラーが発生するという問題がいくつかありましたが、解決したようです。

これまでの結果に非常に感銘を受け、Wordfenceをインストールする前にサイトがハッキングされた後、常に最新バージョンのWordPressとプラグインがあるにもかかわらず、貴重なクリーンアッププロファイルが作成されました。

Wordfencehttps://www.wordfence.com/ /

0
Steve

最初の方法では、コードadd_filter('xmlrpc_enabled', '__return_false');をファイルfunctions.phpまたはサイト固有のプラグインに入れることができます。 functions.phpファイルを編集するよりも、サイト固有のものにすることをお勧めします。

およびxmlrpcを排除するための他の方法

0
yaser hamzeloy

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