Varnish modsecurity 规则语法错误

Varnish modsecurity rules syntax errors

我正在尝试 运行 在 Varnish (varnish-6.0.3) 中进行 modsecurity CRS,但我遇到了规则 932106、932150、932105 和 932100 -> RCE 相关的问题。 VCC 编译器抛出语法错误(例如 [rule 932106]):

   if(req.url ~ "(?:;|\{|\||\|\||&|&&|\n|\r|$\(|$\(\(|`|${|<\(|>\(|\(\s*\))\s*(?:{|\s*\(\s*|\w+=(?:[^\s]*|$.*|$.*|<.*|>.*|\'.*\'|\".*\")\s+|!\s*|$)*\s*(?:'|\")*(?:[\?\*\[\]\(\)\-\|+\w'\"\.\/\\]+\/)?[\\'\"]*(?:(?:(?:a[\\'\"]*p[\\'\"]*t[\\'\"]*i[\\'\"]*t[\\'\"]*u[\\'\"]*d|u[\\'\"]*p[\\'\"]*2[\\'\"]*d[\\'\"]*a[\\'\"]*t)[\\'\"]*e|d[\\'\"]*n[\\'\"]*f|v[\\'\"]*i)[\\'\"]*(?:\s|<|>).*|p[\\'\"]*(?:a[\\'\"]*c[\\'\"]*m[\\'\"]*a[\\'\"]*n[\\'\"]*(?:\s|<|>).*|w[\\'\"]*d|s)|w[\\'\"]*(?:(?:\s|<|>).*|h[\\'\"]*o))\b{
------------------------------------------------------------------------------------------------------------------------------------------#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

没有任何进一步的解释,这意味着语法错误在:\",这有点令人惊讶,因为 " 字符被转义了。

有没有人过去遇到过类似的问题或知道如何解决?

来自规则集的正则表达式未被修改,并且是来自 CRS (v3.0) 的稳定正则表达式。

我建议你使用long strings来减少逃避问题的风险。

长字符串在 Varnish 中的样子:

{"Some string, including "double quotes""}

这样,您就不需要对双引号进行转义,也许这会解决您的问题。