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

Is code injection possible in the test string of a RegExp?

是否可以在 JavaScript 正则表达式的测试字符串中注入代码?

此代码在服务器端执行:

const userInput = "..."; // user input provided by client
const match = new RegExp(regex, "i").test(userInput);

regex 是静态的,驻留在服务器端。只有userInput字符串是我们无法控制的,用户可以输入他们想要的任何内容。

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

这是安全的,除非 JavaScript 引擎 运行 正则表达式中存在非常具体的漏洞(缓冲区溢出等),这种情况 非常不可能但并非完全不可能。

new RegExp(...).test(userInput) 没有注入漏洞,但属于拒绝服务向量 (ReDoS)。

"Reviewing Regexes in The Application" 解释了如何审查您从服务器获得的正则表达式。