Apache - 阻止请求,但仅当查询字符串中不存在三个关键字时

Apache - block request but only when three keywords are not present in the query string

对于包含示例 select、md5、declare、drop 和类似内容的任何 GET 请求,我都需要 return 403,但仅当以下三个时QUERY_STRING 中不存在关键字(key1、key2keyx)。

当前情况(如果名称或类型或值在查询字符串中不存在,则工作正常):

RewriteCond %{QUERY_STRING} !(^|&)/key1|key2|keyx/($|&) 
RewriteCond %{QUERY_STRING} ^.*(phpunit|md5|benchmark|union|cast|declare|drop).* [NC]

基本上,当查询字符串中存在所有三个关键字时,我只需要绕过第二行的规则。

您可以使用这两个条件:

RewriteCond %{QUERY_STRING} !(^|&)(key1|key2|keyx)\b [NC]
RewriteCond %{QUERY_STRING} \b(phpunit|md5|benchmark|union|cast|declare|drop)\b [NC]
  • \b 用于单词边界
  • mod_rewrite 模式不允许像 Javascript
  • 这样的 /.../ 符号
  • 您尝试的分组错误
  • 关键字前后不需要匹配.*