HTACCESS - 使用 BrowserMatchNoCase 阻止多个版本的过时浏览器 (Chrome / Firefox)

HTACCESS - Using BrowserMatchNoCase to block multiple versions of obsolete browsers (Chrome / Firefox)

我试图找到解决这个问题的办法,但没能找到。

我已经在我的 htaccess 中使用这些行来阻止旧版或过时版本的 Firefox 和 Chrome 因为它们中的大多数被机器人/受感染的主机使用。

BrowserMatchNoCase "Chrome/[17.0.0.0-86.0.0.0]" bad_bots
BrowserMatchNoCase "Firefox/[3.0-86.0]" bad_bots

它运行完美,据我所知它正在阻塞:(我说得对吗?)

但是最近,由于 Chrome 和 FF 更新到 100,事情没有按预期工作。 我的规则阻止了这些浏览器版本,所以暂时,我通过添加 :

做了一个肮脏的解决方法
BrowserMatchNoCase "Chrome/100" !bad_bots
BrowserMatchNoCase "Firefox/100" !bad_bots
etc...

我的问题:

是否可以解决该“问题”并且不阻止 100 及更高版本的浏览器版本?怎么样?

是否可以使用 BrowserMatchNoCase 保留这些规则?

非常感谢。

BrowserMatchNoCase "Chrome/[17.0.0.0-86.0.0.0]" bad_bots
BrowserMatchNoCase "Firefox/[3.0-86.0]" bad_bots

It worked flawlessly and from my understanding it was blocking : (Am I right ?)

  • Every Chrome browser version from 17.0.0.0 to 86.0.0.0
  • Every Firefox browser version from 3.0 to 86.0.0.0

不,它根本没有这样做!您不能像使用正则表达式那样指定数值范围。

正则表达式 [17.0.0.0-86.0.0.0] 是一个 字符 class 并且与简单的 [.012345678](或 [.0-8])相同,它匹配方括号之间列出的字符中的单个字符。连字符 (-) 表示 ascii 字符 范围。例如。 a-z.

因此,您的正则表达式 Chrome/[17.0.0.0-86.0.0.0] 匹配任何包含以下子字符串之一的 user-agent:

  • Chrome/.
  • Chrome/0
  • Chrome/1
  • Chrome/2
  • Chrome/3
  • Chrome/4
  • Chrome/5
  • Chrome/6
  • Chrome/7
  • Chrome/8

因此,它基本上会阻止任何不以 9 开头的 Chrome 版本。换句话说,它将允许版本 9 和 90 到 99 并阻止所有其他版本(直到我们最终获得版本 900!)。

如果您仍然想采用相同的方法并阻止旧的 user-agent 字符串,那么您将需要遵循您的“肮脏的解决方法”并为您确实想要允许的 user-agent 打孔.尽管您可以概括一点并允许数百个版本中的任何版本,例如。 1\d\d(1 后跟两位数)

例如,阻止所有内容然后允许特定User-Agent模式会更容易:

# Block all Chrome User-Agents
BrowserMatchNoCase "Chrome/" bad_bots

# Allow Chrome versions 87, 88, 89, 90-99, 100+
BrowserMatch "Chrome/(8[789]|9\d|\d\d\d)\." !bad_bots

请注意,自官方 Chrome User-Agent 以来,我专门针对 允许的 案例使用了 BrowserMatch(而不是 BrowserMatchNoCase) s 总是大写 C.