我听说过很多关于 eval 的坏事,我什至从未尝试过使用它。但是今天我遇到了一种情况,它似乎是正确的答案。
我需要一个可以通过组合变量进行简单计算的脚本。例如,如果 value=5 且 max=8,我想评估 value*100/max。值和公式都将从外部来源检索,这就是我关心 eval 的原因。
我用一些示例代码设置了一个 jsfiddle 演示:
这些值使用 parseFloat 转换为数字,所以我相信我在这里很安全。公式中的字符再次匹配这个正则表达式:
regex=/[^0-9\.+-\/*<>!=&()]/, // allows numbers (including decimal), operations, comparison
我的问题:
- 我的正则表达式过滤器能保护我免受任何攻击吗?
- 在这种情况下,是否有任何理由使用 eval 与 new Function?
- 还有另一种更安全的方法来评估公式吗?