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、key2 和 keyx)。
当前情况(如果名称或类型或值在查询字符串中不存在,则工作正常):
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
这样的 /.../
符号
- 您尝试的分组错误
- 关键字前后不需要匹配
.*
对于包含示例 select、md5、declare、drop 和类似内容的任何 GET 请求,我都需要 return 403,但仅当以下三个时QUERY_STRING 中不存在关键字(key1、key2 和 keyx)。
当前情况(如果名称或类型或值在查询字符串中不存在,则工作正常):
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 这样的
- 您尝试的分组错误
- 关键字前后不需要匹配
.*
/.../
符号