Javascript:如何安全地使用eval()

时间:2014-04-19 21:03:05

标签: javascript

我正在构建一个小游戏,我已经达到了我需要计算能力提示中的数据的点,这是每个单独的单位所特有的。所以要做到这一点,我想我基本上需要一个公式。我不知道这是不是的方式它应该完成但是这就是我想出来的

tip = 'Hurls a fire ball at your enemy, dealing [X] damage.';
formula = '5 * unit.magicPower * abilitylevel';

因此,对于每个单元的工具提示,我使用

tip.replace('[X]', eval(formula))

哪个似乎工作正常,但我关心的是此代码的安全性。我看到人们不鼓励使用它一两次。我使用eval()的方式可能会出现任何潜在问题吗?

3 个答案:

答案 0 :(得分:2)

只要控制eval的输入,就可以安全地使用它。当您使用它来处理您 控制的输入时,会产生这种担忧。此时,它变得不安全,因为它是一个完整的JavaScript解析器,但人们有时会尝试将其用作表达式评估程序(例如,从他们无法控制的源解析JSON时)。

另一个反对意见是,它启动了一个完整的JavaScript解析器(理论上代价很高),但坦率地说,除非你在一个紧密的循环中做了数十万次,否则#39 ;不重要。

答案 1 :(得分:2)

如果用户提供了任何表达式,则

eval非常危险。如果你完全用内置组件构建它,那就不是很危险了。但是,通常仍有更好的方法来完成它,例如调用闭包。

答案 2 :(得分:1)

基本的经验法则是确保默认情况下只通过eval()传递您的数据/信息。

如果他们想要明显搞乱这些东西,你就不能使用像Firebug这样的工具阻止某人,但这就是服务器端验证的内容。

现在,如果您正在谈论服务器端eval(),那么您必须要小心。不幸的是,有很多不合作的人在使用JavaScript及其在浏览器中的实现,所以你不得不在JavaScript中使用eval(),我从来没有在PHP中使用它。