3

我正在使用负前瞻为 AWS WAF 构建正则表达式。

joe(?!(ann|jen))

但是,我从 WAF 控制台返回了以下错误

WAFInvalidParameterException: Error reason: The parameter contains formatting that is not valid., field: REGEX_PATTERN_SET, parameter: joe(?!(ann|jen))

AWS WAF 似乎不支持这种正则表达式。我找到了这个博客 https://aws.amazon.com/about-aws/whats-new/2017/10/aws-waf-now-supports-regular-expressions-regex/

有没有人有类似的问题?你能分享如何解决它吗?

4

1 回答 1

1

由于不支持负前瞻,因此我将我的表达式分解为涵盖所有情况的几个表达式。WAF 允许您指定多个表达式。它使用逻辑或匹配,因此只有其中一个必须匹配。使用问题中的示例,解决方案可能是......

joe[^aj]
joea[^n]
joean[^n]
joej[^e]
joeje[^n]

joe匹配,除非他后跟 ana或 a j。然后他很怀疑,所以我们继续下一条规则。如果a后面跟着一个n,我们仍然怀疑,所以我们继续下一条规则。我们重复这个过程,直到我们决定整个单词是否是joeannjoejen


我的特定用例是 URI 匹配。我想限制对整个目录的请求,除了一个子目录(及其所有子目录)。

假设我们想要节流/my/dir但没有任何内容/my/dir/safe。我们会这样做......

^/my/dir/?$
^/my/dir/[^s]
^/my/dir/s[^a]
^/my/dir/sa[^f]
^/my/dir/saf[^e]
^/my/dir/safe[^/]

我们遵循相同的过程来依次识别每个字母。

“你不能从 S 开始。好吧,你可以从 S 开始,但你不能也有 A。好吧好吧,我让它滑动,但你也不能有 F。好吧好吧,你的坚持, 但...”

请注意,我们必须包含尾部斜杠的规则/。这涵盖了可选的斜杠/my/dir/safe/和所有子目录,例如/my/dir/safe/whatever.

于 2020-08-26T20:02:01.833 回答