Javascript验证缺乏安全性与JavaScript可能关闭无关。
JavaScript可能被关闭意味着一个诚实的错误可能会做错事,或导致默认的服务器消息,而不是一个有用的。虽然他们可能意外触发了一个安全问题(我实际上是以用户的身份完成这项工作的,但最糟糕的是我的输入是有效的,但我输入的其中一个人的名字中有一个'
,更多内容见下文)。这影响了诚实但不完美的用户,而不是饼干。
一个黑客应该能够在大约30秒内以不同的值重播一个AJAX请求,其中包括在另一个窗口中在社交媒体网站上做出愚蠢威胁的时间。这在技术上并不困难。这就是为什么Javascript验证没有安全价值的原因,并且仅仅是为了验证对于诚实的错误更加用户友好(通过具有更直接的响应并且能够将焦点指向不正确的字段)。
此外,这通常不是验证问题,而是编码问题。有些人试图通过禁止可能导致它们的序列来“修复”SQL注入攻击,这通常意味着禁止撇号字符。然后他们把这个逻辑放到合理包含撇号的字段上。特别是,绝对不要使用名称字段来做这件事;人们真的不喜欢被告知他们的名字是“错误的”,并且更糟糕的是,他们可能会感觉到种族主义或文化不敏感,因为你会发现他们很多。法国或爱尔兰的名字,但不常用英文或德文的名字(是的,我知道诺曼起源的英文名字通常有它们,但我也听到有名字的撇号人在他们的名字中咆哮愚蠢的种族主义网站,不会让他们输入他们的名字是正确的,这可能是提出诺曼人作为纠正的最坏时期)。
验证在JavaScript中显然错误作为改进UI的手段。
验证服务器上显然是错误的,作为改进UI的手段和捕获攻击的方法。
以正确的方式将您的数据传递给其他图层。在SQL方面,这意味着编码字符串分隔符(再次,'
是最常见的情况,但对于某些数据库可能还有其他一些分隔符),对此,最好的方法是通过一个库来完成。在C#的情况下,这意味着使用ADO.NET使用Parameters
,而不是自己构建SQL(这也有其他优点)。
我想说的是,使用SQL * *参数在SQL命令(也可以让你避免连接包含来自用户的数据的SQL语句部分)应该删除大部分问题。 – 2010-10-12 10:53:38