#1 楼
由于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>
,或使用它禁用NGINX服务器块对
xmlrpc.php
文件的访问。# nginx block xmlrpc.php requests
location /xmlrpc.php {
deny all;
}
>请注意,禁用也会影响通过移动设备登录。如果我是正确的WordPress移动应用程序确实需要这样做。
有关使用
XML-RPC
的更多信息,请参见Codex。请始终对文件进行备份。编辑/添加。
编辑/更新@Prosti,-您绝对正确-关于
RESTful API
将为WordPress提供的选项! 我忘了提这个。它应该已经集成到了当时无法实现的核心(WordPress 4.1版)中。但看起来,它将成为WordPress 4.5的核心。当前替代方案是此插件:WordPress REST API(版本2)
您可以使用它直到
Restful API
也是WordPress的核心WordPress.WordPress 4.5发布的目标日期。 (2016年4月12日(+ 3w))对于那些对
RESTful
感兴趣的人,在Stackoverflow上是一个非常不错的社区Wiki。#2 楼
如果可以通过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 -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 楼
我们正在使用htaccess文件来保护它免受黑客攻击。# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
#4 楼
最好的办法是使用插件禁用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之间没有明显的性能差异。#5 楼
对于在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>
#6 楼
第一种方法是将代码add_filter('xmlrpc_enabled', '__return_false');
放入文件functions.php
或特定于站点的插件中。显然,与编辑文件functions.php
相比,更建议将其放在特定于站点的文件中。以及其他消除xmlrpc的方法
#7 楼
我最近安装了Wordfence,从6.3.12版本开始,它可以阻止直接访问任何位置。将/xmlrpc.php放到禁止访问的IP列表中的“选项”页面上,“立即阻止访问这些URL的IP”现在显示大约每15分钟就会被阻止一次。这也具有优势能够阻止URL从那些讨厌的bot一次又一次返回不同IP地址的情况中逃脱。
我不知道它是否允许Apps正确使用xmlrpc.php
我遇到了一些问题,它最初在服务器上产生504 Timeout和502 Bad Gateway错误,但似乎已经解决了。
迄今为止的结果给我们留下了非常深刻的印象,尽管该站点在安装Wordfence之前遭到黑客入侵,并且始终拥有最新版本的WordPress和插件,但它产生了有价值的清理配置文件。
Wordfence https://www.wordfence.com/
评论
将/xmlrpc.php添加到禁止访问它的IP的安全规则中,似乎可以阻止合法流量。如果某个站点启用了pinging链接,则指向该站点的链接将向该URL发送请求,并立即被阻止...似乎可能会引起问题。
–adam-asdf
17年9月22日在18:38
#8 楼
我为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;
}
评论
如果我正确的话,WordPress移动应用程序确实需要这样做-将来一旦我们过渡到WordPress RESTful API(WordPress 4.5),可能就不需要了
–prosti
16-3-4在7:55
对于那些仍然为单个帖子/页面获得X-Pingback标头的用户。我们需要使用另一个过滤器将其完全删除:add_filter('pings_open','__return_false',PHP_INT_MAX);。
– SarahCoding
16年8月10日在17:02
将类似的内容添加到functions.php会在更改主题时失去所有效果。 function.php仅用于设计目的,请使用插件!
–大卫
16-09-20在11:07
@David,当然可以,但是ppl最好使用mu-plugins文件夹,而不是使用此类插件。当ppl需要/使用这样的功能时,他们出于某种原因拥有该功能,并且不希望任何人(甚至不是管理员)都可以选择停用插件。
–查尔斯
16-09-20在16:14
看起来那里的nginx conf代码的第一行中缺少等号(=)。这对我有用:location = /xmlrpc.php {
–戴夫
17年2月7日,19:45