xmlrpc.phpを削除する最良の方法は?


回答:


26

WordPress 3.5以降、このオプション(XML-RPC)はデフォルトで有効になっており、WordPressからオフにする機能dashboardはなくなりました。

で使用するこのコードスニペットを追加します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;
}

それは言うことをしますが、それがヒットすることによってサイトが攻撃を受けているとき、それは集中することができます。ファイル
で次のコードスニペットを使用した方がよい場合があり.htaccessます。

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

または、これを使用してxmlrpc.php、NGINXサーバーブロックからのファイルへのアクセスを無効にします。

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

無効にすると、モバイル経由のログインにも影響する可能性があることに注意してください。私が正しい場合、WordPressモバイルアプリにはこれが必要です。の使用の詳細については、コーデックス
参照してください。XML-RPC

  • 編集/追加の前に、常にファイルのバックアップを作成してください。


編集/更新

@ Prosti、-あなたは絶対に正しい-WordPressにRESTful API提供されるオプションについて!

これについて言及するのを忘れました。コア(WordPressバージョン4.1)に既に統合されているはずでしたが、その時点では不可能でした。しかし、どうやら、WordPress 4.5の中核となるでしょう。

今のところ、このプラグインはWordPress REST API(バージョン2)
ですRestful API。WordPressのコアになるまで使用できます。
WordPress 4.5のリリースの目標日。(2016年4月12日(+ 3w))

に興味がある人にとってRESTfulStackoverflowにはとても素晴らしいコミュニティwikiがあります。


2
私が正しいなら、WordPressモバイルアプリはこれを必要とします
-WordPress

2
まだX-Pingback単一の投稿/ページのヘッダーを取得している人向け。完全に削除するには、別のフィルターを使用する必要がありますadd_filter('pings_open', '__return_false', PHP_INT_MAX);
-MinhTri

1
そのようなものを追加すると、functions.phpテーマを変更するときにすべての効果が失われます。function.php設計目的のみのため、プラグインを使用してください!
デビッド

@David、確かに、pplはそのようなプラグインを作成する代わりに、mu-pluginsフォルダーを使用した方が良いでしょう。pplがこのような機能を必要とする/使用するとき、彼らはそれを理由を持っており、誰も(管理者でさえも)プラグインを無効にするオプションを持たせたくありません。
チャールズ

そこには=nginx confコードの最初の行に等号()がないように見えます。これは私のために働いた: location = /xmlrpc.php {
デイブ


5

Webサーバーの構成を介してブロックする機能がある場合、@ Charlesの提案は適切です。

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

4

xmlrpc.phpファイル自体を削除または無効にするのではなく、プラグインで機能を無効にすることをお勧めします。ファイル自体はWordPressのコアアップデートで置き換えられますが、プラグインはコアのアップデート後やテーマを変更した場合は無効のままになります。

さまざまなプラグインについては、https://wordpress.org/plugins/search.php?q = disable + xml-rpcを参照してください。それらはすべてわずかな違いがあります。

これらのプラグインは、テーマのfunctions.phpファイルに追加された関数またはorder,allow deny.htaccessにルールを追加する(他の回答で概説されている)関数と同じことを行います。違いは、プラグインまたは関数がxmlrpc.phpPHP経由の呼び出しを無効にし、 Webサーバー(ApacheまたはNginx)でmod_rewriteを活用する。最新のサーバーでPHPとmod_rewriteを使用しても、パフォーマンスに大きな違いはありません。


3

IISでWordPressをホストしている極端な少数派については、IIS URL書き換えモジュールを使用して、同様の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>


0

私は最近Wordfenceをインストールしました。バージョン6.3.12の時点で、任意の場所への直接アクセスをブロックすることができます。禁止されたアクセスIPのリストの[オプション]ページに/xmlrpc.phpを置くと、「これらのURLにアクセスするIPを即座にブロックする」は、約15分ごとにブロックされる1回の試みを示します

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

有効な操作のためにAppsがxmlrpc.phpを使用できるかどうかはわかりません。

最初にサーバー上で504タイムアウトと502 Bad Gatewayエラーを生成する問題がありましたが、落ち着いたようです。

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

Wordfence https://www.wordfence.com/


/xmlrpc.phpアクセスするIPを禁止するセキュリティルールを追加すると、正当なトラフィックがブロックされる可能性があるようです。pingbacksが有効なサイトへのリンクがサイトにある場合、そのサイトはそのURLにリクエストを送信し、すぐにブロックされます...問題を引き起こす可能性があるようです。
アダム自衛隊

0

私は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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.