在GCP云甲规则的比赛中使用RE2表达式



嗨,我正试图在云盔甲安全策略中设置规则,以阻止主机设置为IP地址的请求。这应该是相当直接的,除了当我试图应用该规则时,我只是在web控制台得到一个错误。

以下是自定义规则的RE2代码:
!has(request.headers["Host"]) ||
request.headers["Host"] == "" ||
request.headers["Host"].matches('(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)')

我们得到主机报头,然后对主机报头字符串使用.matches()。正则表达式是相当标准的东西,但我不明白为什么控制台在这种错误信息中犹豫不决:

1:34: token recognition error at: ''(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).'
3:82: extraneous input '3' expecting {'}', ',', IDENTIFIER}
3:84: mismatched input '(' expecting {<EOF>, 'in', '==', '!=', '<', '<=', '>=', '>', '&&', '||', '[', '{', '.', '-', '?', '+', '*', '/', '%%'}
3:28: token recognition error at: '|2'
3:40: token recognition error at: '|['
3:58: token recognition error at: '')'
3:81: expected a qualified name
3:81: undeclared reference to '*error*' (in container '')
1:1: ERROR: Cloud Armor rule matcher expression:1:33: token recognition error at: ''(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).'

我一直在使用这里的文档

嗯,看来我必须在.之前对进行双转义。

因此自定义规则现在是:

!has(request.headers["Host"]) ||
request.headers["Host"] == "" ||
request.headers["Host"].matches('(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)')

相关内容

  • 没有找到相关文章

最新更新