javascript - Eval() 与开发工具

标签 javascript eval developer-tools

所以古老的标准是使用 Eval 是不好的,因为它可能会导致重大的安全问题;特别是在您正在评估可能来自某处用户输入的内容的情况下。这是 100% 有道理的,而且我在避免使用 Eval 方面从来没有遇到过任何问题。不过,我最近遇到了一个奇怪的情况,这让我对这类事情的思考有点不同。

我写了一个类似这样的 JS 函数:

function someFun(param, callback) {
    bool = someOtherFun(param);
    if(bool)
        callback();
    else
        return false;
}

这很精简,但原理是相同的:它调用另一个函数,并根据该函数的返回值执行作为参数提供的函数,或者返回 false。不过,这让我想到,通过使用 F12 中的 JS 控制台,可以像 Eval(txtbox.value) 一样轻松地利用这种东西。这有关系吗?

在 F12 的世界中,在我看来,Eval 是我们最不需要担心的。任何知道什么是注入(inject)攻击的人都可能知道什么是 F12。我错了吗?

最佳答案

虽然您认为 F12 和 firebug 等工具将您的 JavaScript 暴露在新的审查级别并使人们更容易攻击,这一点是正确的,但您忽略了使用 eval 的危险。

不用担心当前用户(浏览器中加载的页面)可能会做什么,而是让我们关心他们在下一台计算机上的协作。假设同事在 Stack Overflow 上输入一条评论,然后将其存储在数据库中,然后发送到我们用户的计算机上进行显示。让我们假设作为渲染过程的一部分,注释被编码为 JSON,然后对其调用 eval。

这里存在一个危险的漏洞,与我们的用户在页面上检查或执行他们自己的 JavaScript 无关。如果他们的同事在评论中嵌入了恶意 JavaScript,并且我们对其调用了 eval,则该 JavaScript 可能会被执行,从而导致该恶意代码在查看该页面的每台计算机上运行。

这就是为什么我们应该避免使用 eval。

关于javascript - Eval() 与开发工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10761264/

相关文章:

javascript - 如何修复此 Angular JS 错误 : [$injector:unpr]?

python - 使用 dict 进行单元测试 __repr__ 的正确方法

javascript - 如何强制在 IE 中打开开发者工具

javascript - 从控制台调用 Javascript 函数

javascript - 对象值更改时在 Web 浏览器中停止调试器

javascript - JavaScript 不区分大小写

javascript - Vuex 从状态加载现有表单数据以进行编辑

eval - eval() 的威力有多大?

eval - jmeter : Error invoking bsh method: eval

javascript - IE 中奇怪的 "Null or not an object"错误