我想使用eval()
来解析简单的方程式和逻辑表达式,例如: 12*(4+3)
。
当输入(可能不受信任)被消毒并且仅允许数字时,客户端eval的安全性如何,+ - * /()<> |&!和'真'和'假'一词?
方程式的可用JS解析器对我来说太大而且功能强大。我把自己扔了一个,但是与eval'ing相比,它有很多代码,而且它还不完美。
编辑:所以,是的,我猜我特别要求的是,有人可以执行恶意代码而不是数字和+ - * /()<> |&! ? (我猜'真'和'假'是无害的)答案 0 :(得分:1)
我认为这是完全安全的,我不认为eval
是邪恶的。只要用它来判断,
并仔细检查您的消毒功能。
由于您不允许_
或$
的unicode字母通过清理,并且javascript标识符必须包含字母,因此不可能污染全局范围,而不是调用函数
从JavaScript 1.5开始,您可以使用ISO 8859-1或Unicode 标识符中的å和ü等字母。您也可以使用\ uXXXX Unicode转义序列作为标识符中的字符。
请记住捕获eval
次调用引发的异常,因为它总是可能输入错误的表达式,例如4><5
。
此外,请务必检查您允许的字符,而不是您拒绝的字符,以便默认情况下拒绝您未考虑的字符。