1

我收到要求更正一个 ASP 网站,该网站具有许多防止 SQL 注入的功能。

本网站不允许我们的一位客户在本网站上注册。

在客户的名字上有“SELECT”这个词。并且防止 SQL 注入的功能正在将“SELECT”一词替换为“”。客户肯定不喜欢收到一封没有姓名的信。哈哈

该网站正在使用旧的经典 ASP 方式来访问数据,例如:

strSQL = "SELECT name " & _
   "FROM MyTable " & _
             "WHERE (ID=" & itemID & ") AND (CompanyID=" & companyID & ") AND (MenuTitle LIKE '%" & titleText & "%') "
recordset.Open strSQL

所以他们需要使用这些函数来防止 SQL 注入。

我想改变它,我将开始使用参数化查询。

所以,我的问题是:如果我使用参数化查询,我可以安全地删除这些函数以防止来自该站点的 SQL 注入吗?

4

3 回答 3

3

在网络服务器和数据库之间的层中,使用参数化查询一种针对 SQL 注入的保护,但前提是每条用户数据都以这种方式使用。

但是,您仍然可以从数据库层内部遇到 SQL 注入问题,因此请确保您不要调用任何本身通过字符串插值构建查询的存储过程。

于 2012-06-19T14:25:45.827 回答
1

我不会仅仅依靠参数化查询作为防止 sql 注入和其他类型的黑客攻击的唯一形式。建议使用内部或第三方维护级别的安全软件/代码,以防止 sql 注入、跨站点脚本、软件安全漏洞等。

您可以考虑用URLScan 3.1替换它们的多个功能,以快速有效地保护您的应用程序免受 IIS 级别的 sql 注入尝试,以及通过您的应用程序正确清理您/其他人已经提出的 sql 语句。

于 2012-06-20T12:56:24.590 回答
0

简短的回答是肯定的。

长答案是肯定的,但你仍然想清理你的输入。不一定是像“SELECT”这样的词,而是非字母数字字符或任何可疑的东西(基于用例)。参数化查询是安全性的重要组成部分,但它不是灵丹妙药。

于 2012-06-19T12:44:14.693 回答