提问人:cloudfeet 提问时间:10/13/2023 更新时间:10/16/2023 访问量:69
使用“新函数”验证 JS 语法
Using `new Function` to validate JS syntax
问:
我想验证(客户端)用户是否输入了有效的 JavaScript 代码。
引入 Javascript 解析器(例如 Acorn 或 Esprima)是一个相对较重的依赖。但是(如果未启用 CSP),我可以执行以下操作:
try {
new Function(userCode);
return {valid: true}
} catch (e) {
return {
valid: false,
error: e.message
};
}
虽然这确实使用 ,但用户提供的代码从不运行,只进行解析/编译。是否仍然存在安全问题?new Function
答:
2赞
Bergi
10/16/2023
#1
这似乎很好。解析/编译 JS 代码是安全的,并且没有副作用(模块解析和加载不适用于 )。我们可以肯定,现代浏览器中使用的 JavaScript 解析器完全没有错误。Function
评论
new Function(`const fn = new Function("1ee")`)
userCode
__proto__
new Function("throw Error()")