【发布时间】:2013-08-12 14:24:04
【问题描述】:
许多开发人员认为应该避免使用 JavaScript 的 eval() 方法。从设计的角度来看,这个想法是有道理的。当有更简单、更好的选择时,它通常被用作丑陋的解决方法。
但是,我不理解对安全漏洞的担忧。当然,运行eval() 使黑客能够运行您可以运行的任何 JavaScript 代码。
但他们就不能这样做吗?至少在 Chrome 中,开发者工具允许最终用户运行他们自己的 JavaScript。 eval() 比开发者工具更危险吗?
【问题讨论】:
-
这不是“共同共识”。许多经验丰富的开发人员对
eval的 FUD 感到恼火。 “eval is evil” 今天可能从未被有经验的程序员说过。如果你很愚蠢,那可能很危险。但通常它只是缓慢、丑陋并导致代码难以进化。 -
@DenysSéguret 我认为 mozilla 开发人员可以认为是经验丰富的。 article 建议避免使用 eval 并改用 Function ,他们声称这样更快、更安全,因为它只能访问全局范围。
-
@N4ppeL 当然,大多数情况下,
eval有更好的替代品。我告诉了它(将我的评论读到最后)。我的观点是 “eval is evil” 可能是一个有趣的口号,但不是一个有用的口号。顺便说一句,可以说 JS 自 2013 年以来确实发生了一些变化,因此尝试恢复和辩论旧对话可能最好留给历史学家。 -
我强烈不同意最后一部分,因为人们最终还是会在这里寻求建议,因此绝对应该让辩论保持最新。这也是为什么我想指出一个潜在的替代方案,当然
Function也应该谨慎使用。如果可能,应使用 JSON 解析器或类似的工具。还有a more recent thread 讨论这个话题,任何人都可能会感兴趣。
标签: javascript security eval client-side code-injection