通过htaccess进行XMLRPC过滤不起作用

时间:2021-07-27 作者:PaKempf

我的网站托管在共享实例上。他们面临常规的xmlrpc DDoS。我尝试了几种缓解措施来阻止这些攻击:

安装了dedicated extension 这将禁用xmlrpc

在该实例上的所有托管wordpress站点上,通过htaccess阻止xmlrpc,使用两种不同的代码:

<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
以及

    RewriteRule ^xmlrpc\\.php$ "http\\:\\/\\/0\\.0\\.0\\.0\\/" [R=301,L]
但我不断收到那个文件上的请求。我获得的访问日志的一个示例是:

    website.com 162.zzz.yy.xxx - - [22/Jul/2021:09:51:56 +0000] (0 s) "POST /xmlrpc.php HTTP/1.1" 403 199 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"
我认为我应该得到301而不是403,但我不明白我在这里做错了什么。

我已经联系了我的服务提供商,他们只能确认国防部。“重写”模块确实处于活动状态,并将之前提供的代码行放置到位。无济于事。然后他告诉我要联系wordpress社区,这就是我现在所在的地方。

1 个回复
SO网友:MrWhite

中的指令.htaccess (在您的应用程序服务器上)似乎按预期工作。

但我一直收到那个文件上的请求。

阻止中的请求.htaccess 不会阻止请求到达服务器(并被记录)。正如您从日志条目中看到的,它是;“已阻止”;您的服务器正在响应403 禁止的HTTP响应状态(由于<Files> / deny from all 指令)。这个xmlrpc.php 未处理文件。

阻止请求到达应用程序服务器的唯一方法是实施某种防火墙或前端代理服务器,它基本上位于应用程序服务器的前面,并且;屏幕“;将所有请求传递到最终处理该请求的后端服务器之前。但既然你在;“共享托管”;平台,这可能不是您可以使用的。

我想我应该得到301而不是403

中的mod\\u authz\\u host(或Apache 2.4上的mod\\u access\\u compact)指令<Files> 容器将优先于mod\\u rewrite指令,尽管在.htaccess 文件,因此不会发生重定向。

删除<Files> 阻止并放置RewriteRule 位于.htaccess 文件,清除浏览器缓存,您应该会看到重定向。(请注意,301s由浏览器持久缓存,因此在清除浏览器缓存之前,后续的“测试”请求可能不会命中服务器。)

然而,最好用403阻止这些请求,而不是尝试发出301重定向。机器人程序无论如何都不太可能遵循重定向,因此这只是一个不成功(200)响应。mod\\u rewrite指令更容易意外重写,并且更依赖于中指令的顺序.htaccess.

<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
请注意OrderDeny 指令是Apache 2.2,在Apache 2.4上已被正式弃用。如果您使用的是Apache 2.4,那么应该使用Require all denied 相反

旁白:

RewriteRule ^xmlrpc\\.php$ "http\\:\\/\\/0\\.0\\.0\\.0\\/" [R=301,L]
TheRewriteRule 替换字符串(第二个参数)是一个;“普通”;字符串,不是正则表达式,所以冒号(:), 斜杠(/) 和点(.) 此处不需要反斜杠转义。(尽管即使是正则表达式,也只需要转义文字点,因为其他字符在这里没有特殊意义。这种不必要的转义是cPanel的典型特征。)

相关推荐

HTAccess重定向-替换特殊字符

在我的previous post, 我问过如何301重定向所有.com/language/X URL到.com/members/?members_search=X 使用htaccess。谢天谢地,我得到了帮助,解决办法是RewriteRule ^language/(.*) /members/?members_search=$1 [R=301,L]我刚刚发现,我还需要将任何现有连字符转换为空格。我假设不会有超过2个连字符。测试用例http://example.com/language/american-en