我正在创建一个Asp.Net程序UI,用户可以在其中浏览和更改数据库中的信息。出于这个原因,他们需要能够使用所有形式的字符,但我仍然需要保持程序HTML和SQL本身的安全。出于这个原因,我正在使用一种自建的方法来替换危险的字符,例如'<'等等他们的html代码在文本框之外处理(在页面加载时发布,因此他们没有任何功能)。
现在我的困境:为了能够做到这一点,我必须根据主题禁用Validaterequest参数,程序将发出投诉。将其设置为False会产生什么后果?
SQL查询已经参数化,我只过滤掉以下标记:
& # < > " ’ % @ =
问题:即使我处理上面的字符,我是否会将程序保持开放以进行威胁?基本上这是一个内部网应用程序,只有少数人可以访问该程序。然而,它访问的信息非常重要,因此应该防止意外的意外事故。我完全不知道Validaterequest甚至做了什么。
编辑:好的,这是答案。我会按照最初计划的那样去做。
答案 0 :(得分:4)
Validate Request正在寻找的主要内容是&lt;和&gt;字符,阻止您打开您的网站,直到恶意用户向您的网站发布脚本和/或HTML。
如果您对已删除HTML标记的代码感到满意,或者未将处理后的保存数据显示回网站,那么您应该没问题。
答案 1 :(得分:2)
基本上通过替换特殊字符验证用户输入通常会导致更多麻烦,并不能真正解决问题。这一切都取决于用户输入的内容,有时他们需要像
这样的特殊字符& # < > " ’ % @ =
认为精明的用户仍然可以使用xp_命令甚至使用CONVERT()函数来进行ASCII /二进制自动攻击。只要您参数化所有输入,它应该没问题。
答案 2 :(得分:1)
我认为问题不仅在于SQL注入攻击,还在于跨站点脚本和JS执行攻击。 为了防止这种情况,您不能单独依赖参数化查询,您应该对用户发送的html进行“清理”!也许像html tidy这样的工具可以提供帮助。