首页 > 解决方案 > eval 与函数构造函数

问题描述

我在 MDN 上阅读了有关内容eval,它似乎暗示了一个“更好”的替代方法eval是使用function constructor。MDN 似乎强调了使用函数构造函数的安全风险低于eval

第三方代码可以看到调用 eval() 的范围,这可能导致类似 Function 不易受到的攻击。

-MDN

“第三方代码可以看到调用 eval() 的范围”究竟是什么意思,它如何影响我的 JS 应用程序的安全性?

标签: javascriptfunctionsecurityeval

解决方案


从 MDN 页面:

但是,与 eval 不同的是,Function 构造函数创建的函数仅在全局范围内执行。

如果您将所有代码包装在一个闭包中,则无法从评估的函数体中访问秘密对象。

(() => {
  let secret = 42;
  eval("console.log(secret)"); // 42
  let fn = new Function("console.log(secret)");
  fn(); // secret is not defined
})();


推荐阅读