所以古老的标准是使用 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/