2010-03-03 20 views
33

我有一个行代码时通过JSLint的运行得到以下错误:目的的JSLint的“禁止不安全的正则表达式”选项

Lint at line 604 character 48: Insecure '^'. 
numExp = parseInt(val[1].replace(/[^\-+\d]/g, ""), 10); 

这个错误似乎是指从JSLint的的选项页面下面的描述:

"true if . and [^...] should not be allowed in RegExp literals. 
These forms should not be used when validating in secure applications." 

我不太了解客户端JavaScript应用程序如何确实被认为是安全的。即使使用最密不透气的正则表达式,仍然可以启动类似萤火虫的东西并改变变量。真正的输入验证应该在服务器上完成,并且客户端浏览器应该可以坚持验证来处理普通用户的滥用。

忽略此错误安全吗?我在这里错过了一个角度,在这里我的应用程序会因为客户端输入验证而变得不安全?

回答

30

“不安全”是指在这种情况下“非特异性”。这两个点.和独特的范围[^…]都没有明确界定什么应该通过正则表达式匹配。出于验证的目的,这可以建议成功匹配你没有想到和不想要的东西(想想:白名单与黑名单)的风险。

在任何情况下,点和独特的范围是一个正则表达式的有效部分,如果他们这样做,你需要(如在这种情况下)是什么,我想警告为过分谨慎的。

恶意用户可以与你的页面逻辑随时摆弄;该警告更多地是关于页面的正常操作。

14

所有它想告诉你的是,它通常最好指定什么可以输入,而不是什么不能

在这种情况下,你的正则表达式实际上是剥离出不良字符,因此它是安全的忽略警告。