eval 与函数构造函数

Shn*_*ick 6 javascript security eval function

我在 MDN 上读到相关内容eval,它似乎表明一种“更好”的替代方案eval是使用函数构造函数。MDN 似乎强调,与以下方式相比,使用函数构造函数的安全风险较小eval

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

-MDN

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

Ker*_*g73 7

来自 MDN 页面:

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

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

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