使用`new Function`来验证JS语法

问题描述 投票:0回答:1

我想验证(客户端)用户是否输入了有效的 JavaScript 代码。

引入 Javascript 解析器(例如 Acorn 或 Esprima)是一个相对较重的依赖项。但是(如果未启用 CSP),我可以这样做:

try {
    new Function(userCode);
    return {valid: true}
} catch (e) {
    return {
        valid: false,
        error: e.message
    };
}

虽然这确实使用了

new Function
,但用户提供的代码永远不会 run,而只会被解析/编译。还存在安全问题吗?

javascript security eval client-side
1个回答
0
投票

这看起来不错。解析/编译 JS 代码是安全的,没有副作用(模块解析和加载不适用于

Function
)。我们可以肯定,现代浏览器中使用的 JavaScript 解析器几乎没有错误。

© www.soinside.com 2019 - 2024. All rights reserved.