我在我们的网络应用程序的异常日志中看到一个条目,似乎表明用户以某种方式提交了一个网页表单,其中填充的<input type="text" ...>
字符数多于maxlength
属性中指定的字符数为了这个领域。唯一的结果是为日志生成SQL异常并向用户显示一般错误页面(即用户没有看到SQL错误),因此没有造成任何损坏。但我很好奇这是怎么发生的。
我知道有“黑客”方法来规避这一点(通过自定义客户端提交,使用Firebug修改HTML等)但是有任何合法方式可能会发生这种情况(可能使用某些浏览器),我可以通过代码更改来解决这个问题吗?
只是要明确......如果它是通过黑客攻击生成的,则不需要进行任何更改...... SQL错误可以保护系统免受伤害。但是,如果用户以某种方式合法地打击了它,我想修复它。
如果重要......该请求上的用户代理是Safari / Mac (Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
)我无法在Windows Safari上重现该问题,而且我无法访问Mac。
答案 0 :(得分:4)
可能性包括:
maxlength
请记住,作为请求的一部分发送的浏览器字符串非常容易伪造,除了基本分析之外,它甚至不值得相信它。
通常,您需要验证线路上的所有内容,防止任何不良数据进入系统的内部(即数据库)。 HTML输入字段maxlength
属性和任何其他客户端验证是为了方便您的用户,但不会以任何方式保护您的网站。此外,如果您执行自己的验证,则可以向用户返回更好的错误消息。此外,它还可以帮助您在出现问题时调试自己的应用程序。
在我看来,任何导致数据库错误产生的用户提交的数据都是一个严重的缺陷,可能表明系统存在安全漏洞。
答案 1 :(得分:0)
真正的解决方案是进行服务器端验证,而不是客户端验证。设置maxlength
肯定没有害处,但绝不应该是你的最后一道防线。