阻止用户代理

Blocking user agent

谁能告诉我如何使用 apache2 mod 重写或任何其他方法来阻止以下用户代理,

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/A1E1

要使用 mod_rewrite 阻止 Apache vHost 中的特定用户代理,您可以这样做:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/A1E1"
RewriteRule ^ - [F]

这为来自该确切用户代理的任何请求提供 403 禁止。

正则表达式(第一个参数)^(字符串开头断言)对每个请求都是成功的。虽然 substitution 字符串(第二个参数)中的单个 -(连字符)表示没有替换(我们只是阻止请求,而不是重写 URL)。

通过在 CondPatternRewriteCond 指令的第二个参数)前加上 = 使其成为字典字符串比较(即完全匹配) ,不是正则表达式。由于我们匹配的字符串包含空格,因此需要周围的双引号。

F 标志等同于 R=403L 标志不是必需的,因为在返回非 3xx(或 2xx)状态时它是 隐含的


更新:

can we add a wildcard entry like the last part of Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/A1E1 keeps changing the /A1E1

是的,但您需要将上面的 CondPattern 更改为正则表达式。

例如:

RewriteCond %{HTTP_USER_AGENT} "^Mozilla/5\.0 (Windows NT 6\.1; WOW64; rv:63\.0) Gecko/20100101 Firefox/"

以上匹配 启动 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/ 的任何用户代理,从而留下用户代理变量的结尾。

请注意,由于这是一个正则表达式,因此任何特殊的正则表达式元字符都需要反斜杠转义。在此示例中,这似乎只是点 (.)。仍然可以使用周围的双引号来避免必须转义空格。