0

所以古老的标准是使用 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 是我们最不担心的事情。任何知道什么是注入攻击的人都可能知道 F12 是什么。我错了吗?

4

2 回答 2

5

虽然您认为 F12 和 firebug 之类的工具将您的 JavaScript 暴露在新的审查级别并使其易于攻击是正确的,但您却忽略了使用 eval 的危险。

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

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

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

于 2012-05-25T21:07:06.070 回答
2

我没有看到漏洞利用场景。是的,他们可以通过恶意回调调用您的函数。或者......他们可以从控制台调用恶意回调。

于 2012-05-25T21:04:21.313 回答