我正在尝试在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{
------------------------------------------------------------------------------------------------------------------------------------------#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
没有任何进一步的解释,这意味着语法错误在“\”之内,这有点令人惊讶,因为“char被转义了。
以前有没有人遇到过类似的问题,或者不知道如何解决?
规则集中的正则表达式未经修改,是CRS(v3.0)中稳定的正则表达式。
最佳答案
我建议您使用 long strings 来降低逃避问题的风险。
这是一个长字符串在 Varnish 中的样子:
{"Some string, including "double quotes""}
这样,您就不需要转义双引号,也许这会解决您的问题。
关于regex - Varnish modsecurity规则语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61224122/