javascript - eval 与函数构造函数
问题描述
我在 MDN 上阅读了有关内容eval
,它似乎暗示了一个“更好”的替代方法eval
是使用function constructor。MDN 似乎强调了使用函数构造函数的安全风险低于eval
:
第三方代码可以看到调用 eval() 的范围,这可能导致类似 Function 不易受到的攻击。
“第三方代码可以看到调用 eval() 的范围”究竟是什么意思,它如何影响我的 JS 应用程序的安全性?
解决方案
从 MDN 页面:
但是,与 eval 不同的是,Function 构造函数创建的函数仅在全局范围内执行。
如果您将所有代码包装在一个闭包中,则无法从评估的函数体中访问秘密对象。
(() => {
let secret = 42;
eval("console.log(secret)"); // 42
let fn = new Function("console.log(secret)");
fn(); // secret is not defined
})();
推荐阅读
- python - python 2和python 3的'functools.lru_cache'有什么变化吗?
- javascript - 在给定点测量物体的周长
- cmake - 柯南_PKG::
使用cmake生成构建目标时找不到 - python - Tensorflow 无法解码 tfrecords 中的 jpeg 字节
- android - 如何在 Android 的 App Theme 中指定 Toolbar 主题?
- c# - 可查找模型
- python-dateutil - 从字典创建 dateutil.relativedelta.relativedelta 对象的 Python 方法
- python - 为什么调用 '.values' 时 pd.Timestamp 会转换为 np.datetime64?
- c++ - 旧的 alloctaor::construct 与新的和显式构造函数之间有什么区别?
- laravel - Laravel如何用盐创建sha256哈希