我正在构建一个小游戏,我已经达到了我需要计算能力提示中的数据的点,这是每个单独的单位所特有的。所以要做到这一点,我想我基本上需要一个公式。我不知道这是不是的方式它应该完成但是这就是我想出来的
tip = 'Hurls a fire ball at your enemy, dealing [X] damage.';
formula = '5 * unit.magicPower * abilitylevel';
因此,对于每个单元的工具提示,我使用
tip.replace('[X]', eval(formula))
哪个似乎工作正常,但我关心的是此代码的安全性。我看到人们不鼓励使用它一两次。我使用eval()
的方式可能会出现任何潜在问题吗?
答案 0 :(得分:2)
只要你控制eval
的输入,就可以安全地使用它。当您使用它来处理您 控制的输入时,会产生这种担忧。此时,它变得不安全,因为它是一个完整的JavaScript解析器,但人们有时会尝试将其用作表达式评估程序(例如,从他们无法控制的源解析JSON时)。
另一个反对意见是,它启动了一个完整的JavaScript解析器(理论上代价很高),但坦率地说,除非你在一个紧密的循环中做了数十万次,否则#39 ;不重要。
答案 1 :(得分:2)
eval
非常危险。如果你完全用内置组件构建它,那就不是很危险了。但是,通常仍有更好的方法来完成它,例如调用闭包。
答案 2 :(得分:1)
基本的经验法则是确保默认情况下只通过eval()
传递您的数据/信息。
如果他们想要明显搞乱这些东西,你就不能使用像Firebug这样的工具阻止某人,但这就是服务器端验证的内容。
现在,如果您正在谈论服务器端eval()
,那么您必须要小心。不幸的是,有很多不合作的人在使用JavaScript及其在浏览器中的实现,所以你不得不在JavaScript中使用eval()
,我从来没有在PHP中使用它。