我想允许用户在文本输入中执行简单的计算,因此键入2 * 5将导致10.我将使用空字符串替换除数字之外的所有内容,然后使用eval()进行计算。这似乎更容易,并且可能比手动解析它更快。
经常有人说eval()是不安全的,所以我想听听在这种情况下使用它是否有任何危险或缺点。
function (input) {
value = input.value.replace(/[^-\d/*+.]/g, '');
input.value=eval(value);
}
答案 0 :(得分:7)
这是安全的,不是因为你正在消毒它,而是因为它全部由用户输入并在他们自己的浏览器中运行。如果他们真的想输入恶意代码,他们无论如何都可以通过使用firebug或web检查器,甚至使用bookmarklet来实现。值得庆幸的是,除了锁定您自己的浏览器之外,您无法使用javascript进行恶意攻击:)
答案 1 :(得分:1)
这是安全的,因为在将其放入eval之前,您正在进行输入验证。
除此之外你还应该添加:
()%