用于阻止带有额外条件的僵尸程序的.htaccess规则

时间:2021-03-02 作者:Irene

我安装了WP multisite。我与Ezoic和Cloudflare集成。我实施了防火墙规则。但是,我在阻止具有X-MiddletonUser-Agent, 因为我的原始服务器允许它,用于检测真正的用户IP。

这个X-Middleton 当机器人通过充当反向代理的Ezoic时,会附加。我在.htaccess 但它不起作用,因为源服务器允许所有X-Middleton.

规则如下:

# BLOCK BOTS
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(ADmantX|Proximic|Barkrowler).*$ [NC]
RewriteRule .* - [F,L]

用户代理可能会阻止一条规则,如果;“坏机器人”;有X-MiddletonUser-Agent?

1 个回复
SO网友:MrWhite

可以这样尝试:

RewriteCond %{HTTP_USER_AGENT} (ADmantX|Proximic|Barkrowler|X-Middleton) [NC]
RewriteRule ^ - [F]
这将阻止任何请求,其中User-Agent 字符串包含ADmantX, Proximic, BarkrowlerX-Middleton. 这个NC flag使其成为不区分大小写的匹配-我不知道在本例中是否严格要求这样做,但通常这应该是区分大小写的匹配,因为User-Agents (即使来自坏机器人)通常与案例一致。

regex前缀^.* 和后缀.*$ 都是多余的。

正则表达式模式(A|B|C|D) 称为交替。本质上是指ABCD 将匹配。

这个RewriteRule 图案.* 可简化为^ - 这也稍微有效一些,因为您不需要实际匹配这里的任何内容,只需成功即可。

这个LF 使用标志-它是隐含的。

<小时/>

UPDATE:

看来X-Middleton (或者更确切地说X-Middleton/1) 当到达您站点的所有用户代理字符串通过Ezoic反向代理时,会将其附加到这些字符串中。因此,仅仅基于用户代理头中存在的这个字符串(如上所述)进行阻止是行不通的,因为它将阻止所有请求!

如果X-Middleton 只需附加到UA字符串,并且不会发生进一步的处理,那么理论上您可以在以下情况下阻止请求:X-Middleton 在UA字符串中出现两次(或更多次),以阻止任何请求,其中X-Middleton 在原始请求中发生。

要处理这种情况,您需要创建一个附加规则。例如:

RewriteCond %{HTTP_USER_AGENT} (X-Middleton).*\\1 [NC]
RewriteRule ^ - [F]
\\1 是与第一个匹配的子模式匹配的内部反向引用,即;X-Middleton公司;。因此,只有当字符串;“X-Middleton”;至少发生两次,由任意数量的字符分隔(或无)。

以上将阻止blah X-Middleton blah X-Middleton/1, 但不是blah blah X-Middleton/1 (不区分大小写匹配)。

但是,我希望在开始使用之前看到此类请求的示例访问日志条目(用户代理字符串)。它不应该阻止真实的用户请求,但也可能不会阻止虚假的请求。如果您没有实际的假请求,则可以通过自定义浏览器发送的用户代理字符串(在Chrome的“Inspector”中的“Customize Menu”中的“More tools”中的“Network conditions”或安装用户代理切换器插件)来模拟请求,或使用CURL发出请求,例如。curl -A "<custom-user-agent>" <siteurl> - 你要去的地方<custom-user-agent>blah X-Middleton blah 或者别的什么。

我还希望看到到达应用程序服务器的HTTP请求头的完整列表,因为可能有更好的方法来解决这个问题。(我发现中间代理修改用户代理而不提供原始值是不寻常的。尽管,maybe there are no additional options?)

相关推荐

服务器(WordPress)重定向不应该重定向的文件(使用htaccess)

我使用.htaccess 重定向某些地址或避免重定向某些地址。基本上,我将所有内容重定向到另一个域,但我指定的某些地址除外。所以example.com/NormalPage 将重定向到example.dev/NormalPage 但是example.com/ThatPage 不会被重定向,如果有人打开example.dev/ThatPage, 它将被重定向到example.com/ThatPage. 某些地址也可以从两个域访问。例如example.com 和example.dev 不会被重定向,并且两者显