regex - Apache - 阻止请求,但仅当查询字符串中不存在三个关键字时
问题描述
对于包含示例select、md5、declare、drop和类似内容的任何 GET 请求,我需要返回 403 ,但前提是QUERY_STRING中不存在以下三个关键字(key1、key2和keyx)。
当前情况(如果查询字符串中不存在名称或类型或值,则可以正常工作):
RewriteCond %{QUERY_STRING} !(^|&)/key1|key2|keyx/($|&)
RewriteCond %{QUERY_STRING} ^.*(phpunit|md5|benchmark|union|cast|declare|drop).* [NC]
基本上,当查询字符串中存在所有三个关键字时,我只需要绕过第二行的规则。
解决方案
您可以使用以下 2 个条件:
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 这样的符号 - 您的尝试分组错误
.*
关键字前后无需匹配
推荐阅读
- python - Python 将 csv 读取到 Dataframe,与日期列纠缠不清
- scala - 在 Kubernetes 中使用 Sbt 作为 BSP 服务器
- c# - 将字符串转换为数组 | C#
- google-cloud-firestore - Firebase/云 Firestore:onSnapshot() 与 on()
- java - 从 Java 连接到 Apache Kafka 的问题
- vba - 如何使用 VBA 在多个 Word 文档中查找和替换文本
- antlr - antlr4:简单语法的输入不匹配
- reactjs - React 测试函数传递给子组件
- dart - Dart Hive TypeAdapter 对 write() 方法的合理性
- github-pages - 您如何将 MathJax 整合到 GitHub Pages 站点中?