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注入.是这样,还是我在搜索的基本任务中真的失败了?
最好的选择是使用参数化查询.关于如何完成,你必须检查:
在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)
有关详细信息,请参阅上面发布的文章链接,或者您可能希望根据需要对该主题进行更多研究.