JavaScript RegExp的测试字符串中是否可以插入代码?
此代码在服务器端执行:
const userInput = "..."; // user input provided by client
const match = new RegExp(regex, "i").test(userInput);
regex
是静态的,位于服务器端。只有userInput
字符串是我们无法控制的,用户可以输入所需的任何内容。
攻击者是否有可能注入代码,还是应该由JS RegExp
方法安全地处理此代码?
答案 0 :(得分:3)
除非在运行正则表达式的JavaScript引擎中存在一个非常特殊的漏洞(缓冲区溢出等),否则这是安全的,这可能性很小,但并非完全不可能。
答案 1 :(得分:1)
new RegExp(...).test(userInput)
可以防止注入漏洞,但是它是拒绝服务媒介(ReDoS)。
"Reviewing Regexes in The Application"说明了如何审核从服务器获取的正则表达式。