Javascript 在RegExp的测试字符串中是否可以进行代码注入?

Javascript 在RegExp的测试字符串中是否可以进行代码注入?,javascript,regex,code-injection,Javascript,Regex,Code Injection,JavaScript正则表达式的测试字符串中是否可能存在代码插入 此代码在服务器端执行: const userInput = "..."; // user input provided by client const match = new RegExp(regex, "i").test(userInput); regex是静态的,驻留在服务器端。只有userInput字符串是我们无法控制的,用户可以输入他们想要的任何内容 攻击者是否有可能注入代码,或者应该通过JSRegExp方法安全地处理这

JavaScript正则表达式的测试字符串中是否可能存在代码插入

此代码在服务器端执行:

const userInput = "..."; // user input provided by client
const match = new RegExp(regex, "i").test(userInput);
regex
是静态的,驻留在服务器端。只有
userInput
字符串是我们无法控制的,用户可以输入他们想要的任何内容


攻击者是否有可能注入代码,或者应该通过JS
RegExp
方法安全地处理这些代码?

这是安全的,除非运行regex的JavaScript引擎中存在非常特定的漏洞(缓冲区溢出等),这是非常不可能的,但并非完全不可能的。

new RegExp(…).test(userInput)
不存在注入漏洞,但它是一种拒绝服务向量(ReDoS)


解释如何检查从服务器获得的regexp。

在这种情况下,regex是静态的,服务器端,只有测试字符串由用户提供。感谢Mike,这篇文章很棒,所以您指的是“确保您的regex不会出现灾难性的回溯”。说得好。@Manuel,是的。当模式不受攻击者控制时,编写的RegExp
/…/
而不是
新的RegExp(…)
没有更大的重做风险,因此这可能与您的问题无关。