针对SQL注入的经典ASP保护

ili*_*den 3 sql-injection sql-server-2000 asp-classic

我继承了大量的经典ASP代码,目前缺少SQL注入保护,我正在努力.我已经详细检查了这里提供的解决方案:经典ASP SQL注入保护 在数据库方面,我有一个Microsoft SQL Server 2000 SP4

不幸的是,存储过程不是一种选择.

在研究了php的mysql_real_escape_string(http://www.w3schools.com/php/func_mysql_real_escape_string.asp)之后,我在ASP中复制了它的功能.

我的问题是:

1)Microsoft SQL Server 2000是否有任何其他需要转义的特殊字符,这些字符在MySQL中不存在(\ x00,\n,\ r,\,',",\ x1a)

2)通过使用单引号转义单引号和周围用户输入,我可以通过答案来防止SQL注入吗? 我读到"对''引用参数'过程发起攻击的一种方法是使用字符串截断.根据MSDN,在SQL Server 2000 SP4(和SQL Server 2005 SP1)中,太长的字符串将被悄然截断."

如何将其用于攻击(我真的无法想象这样的场景)以及什么是正确的防范方法?

3)我应该注意哪些其他问题?注入SQL的任何其他方式?

注意:30分钟的互联网搜索表示,没有经典ASP的库可以防止SQL注入.是这样,还是我在搜索的基本任务中真的失败了?

Sar*_*raz 9

最好的选择是使用参数化查询.关于如何完成,你必须检查:

在PHP中,PDO(和预处理语句)允许开发人员使用参数化查询来避免sql注入.


更新

是的,你可以在WHERE子句中指定参数,为此你可以使用ADODB.Command如下例子的对象:

' other connection code
set objCommand = Server.CreateObject("ADODB.Command") 
...

strSql = "SELECT name, info FROM [companies] WHERE name = ?" _ 
    & "AND info = ?;" 
... 
objCommand.Parameters(0).value = strName 
objCommand.Parameters(1).value = strInfo 
...
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅上面发布的文章链接,或者您可能希望根据需要对该主题进行更多研究.

  • @iliaden:是的,它会:) (2认同)