【问题标题】:Blocking user agent阻止用户代理
【发布时间】:2019-05-02 00:09:36
【问题描述】:

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

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

【问题讨论】:

  • RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^.*Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/A1E1*$ RewriteRule . - [R=403,L] 这样的事情?
  • 没有。在尝试使用基于它们的工具之前,请先阅读正则表达式的简短介绍。
  • 您希望在什么context 中执行此操作?服务器配置? .htaccess?上面RewriteRule 指令中使用的语法旨在用于servervirtualhost 上下文,而不是.htaccess
  • @MrWhite 感谢您的回复。我想将它添加到 Apache2 VirtualHost 中,我想知道这是否是正确的格式。谢谢

标签: mod-rewrite apache2


【解决方案1】:

要使用 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 Forbidden。

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

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

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


更新:

我们能否像Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/A1E1 的最后部分一样添加通配符条目,不断更改/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/ 的用户代理,因此留下了用户代理变量的结尾。

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

【讨论】:

  • 谢谢。它有效,我们可以添加一个通配符条目,如Mozilla/5.0 (Windows NT 6.1; WOW64; rv:63.0) Gecko/20100101 Firefox/A1E1 的最后一部分不断更改 /A1E1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多