我继承了大量的经典ASP代码,这些代码目前缺少SQL注入保护,我正在努力解决它。我已经详细研究了这里提供的解决方案:Classic ASP SQL Injection Protection在数据库端,我有一台Microsoft SQL server2000 SP4
不幸的是,存储过程不是一种选择。
在研究了php的mysql_real_escape_string ( http://www.w3schools.com/php/func_mysql_real_escape_string.asp )之后,我在ASP中复制了它的功能。
我的问题是:
1) Microsoft SQL server2000是否有任何其他需要转义的特殊字符,这些字符在MySQL中不存在( \x00,\n,\r,\,‘,“,\x1a )
2)从Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes?的答案中,我读到“对‘引用参数’过程发起攻击的一种方法是使用字符串截断。根据Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes?的说法,在SQL Server2000 SP4 (和SQL Server2005 SP1)中,过长的字符串将被悄悄截断。”
如何将其用于攻击(我真的无法想象这样的场景),以及保护它的正确方式是什么?
3)还有其他我应该注意的问题吗?有没有其他注入SQL的方法?
注意:一个30分钟的互联网搜索表明,没有针对传统ASP的库来防止SQL注入。是这样吗,还是我在搜索这项基本任务上真的失败了?
发布于 2012-06-14 02:16:26
最好的选择是使用参数化的查询。关于如何做到这一点,你必须检查一下:
在PHP中,PDO (和prepared statements)允许开发人员使用参数化查询来避免sql注入。
更新
可以,您可以在WHERE子句中指定参数,为此您可以使用ADODB.Command object,如下例所示:
' 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
...有关更多信息,请参阅我在上面发布的文章链接,或者如果你愿意,你可能想要更多地研究这个主题。
发布于 2012-06-14 02:19:34
我使用了两层防御:
的第一道防线。
https://stackoverflow.com/questions/11020846
复制相似问题