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

时间:2019-05-23 17:32:46

标签: javascript regex code-injection

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

此代码在服务器端执行:

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

regex是静态的,位于服务器端。只有userInput字符串是我们无法控制的,用户可以输入所需的任何内容。

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

2 个答案:

答案 0 :(得分:3)

除非在运行正则表达式的JavaScript引擎中存在一个非常特殊的漏洞(缓冲区溢出等),否则这是安全的,这可能性很小,但并非完全不可能。

答案 1 :(得分:1)

new RegExp(...).test(userInput)可以防止注入漏洞,但是它是拒绝服务媒介(ReDoS)。

"Reviewing Regexes in The Application"说明了如何审核从服务器获取的正则表达式。