Answers:
由于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移动应用程序确实需要这样做。
有关使用的更多信息,请参见CodexXML-RPC
。
- 在编辑/添加之前,请始终备份文件。
@Prosti,-您绝对正确-关于RESTful API
将为WordPress提供的选项!
我忘了提这个。它应该已经集成到当时无法实现的核心(WordPress 4.1版)中。但看起来,它将成为WordPress 4.5的核心。
当前的替代方法是该插件:WordPress REST API(版本2)
您可以使用它直到Restful API
WordPress的核心。
WordPress 4.5发布的目标日期。(2016年4月12日(+ 3w))
对于那些有兴趣的人
RESTful
,在Stackoverflow上是一个非常不错的社区Wiki。
X-Pingback
单个帖子/页面标题的用户。我们需要使用另一个过滤器将其完全删除:add_filter('pings_open', '__return_false', PHP_INT_MAX);
。
functions.php
在更改主题时将失去所有效果。function.php
仅用于设计目的,请使用插件!
=
的nginx conf代码的第一行中缺少等号()。这对我location = /xmlrpc.php {
我们正在使用htaccess文件来保护它免受黑客攻击。
# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
当您能够通过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
最好的办法是禁用xmlrpc.php
带有插件的功能,而不是删除或禁用文件本身。该文件本身将在WordPress核心更新时被替换,而插件将在核心更新后以及您更改主题后将其禁用。
有关不同的插件,请参见https://wordpress.org/plugins/search.php?q=disable+xml-rpc。它们都有细微的差别。
这些插件的功能与添加到主题functions.php
文件中的功能或向order,allow deny
.htaccess中添加规则的功能相同(如其他答案所述),不同之处在于插件或功能禁止xmlrpc.php
通过PHP进行调用,.htaccess中的规则有效通过利用Web服务器(即Apache或Nginx)中的mod_rewrite。在现代服务器上使用PHP和mod_rewrite之间没有明显的性能差异。
对于在IIS中托管WordPress的极少数用户,您可以使用IIS URL重写模块执行类似htaccess的限制。下面的示例假定X-Forwarded-For标头中包含真实的客户端IP,已知的白名单IP为55.55.555.555,并且您要使用HTTP 404响应非白名单IP。
<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>
第一种方法是将代码add_filter('xmlrpc_enabled', '__return_false');
放入文件functions.php
或特定于站点的插件中。显然,建议将其放在特定于站点的位置,而不是编辑文件functions.php
。
我最近安装了Wordfence,从6.3.12版本开始,它可以阻止直接访问任何位置。将/xmlrpc.php放到禁止访问的IP列表中的“选项”页面上,“立即阻止访问这些URL的IP”现在表明大约每15分钟就会阻止一次尝试。
这还有一个优势,就是能够阻止URL从那些讨厌的僵尸程序中逃脱,这些僵尸程序一次又一次地使用不同的IP地址。
我不知道它是否允许Apps使用xmlrpc.php进行有效操作。
我遇到了一些问题,起初在服务器上会产生504 Timeout和502 Bad Gateway错误,但似乎已经解决了。
迄今为止的结果给人留下了深刻的印象,尽管该站点在安装Wordfence之前遭到黑客入侵,并且始终拥有最新版本的WordPress和插件,但它产生了有价值的清理配置文件。
/xmlrpc.php
到禁止访问IP的安全规则中似乎可以阻止合法流量。如果一个站点启用了pingbacking链接,则该站点将向该URL发送请求并立即被阻止...似乎可能会引起问题。