首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对SQL注入的经典ASP防护

针对SQL注入的经典ASP防护
EN

Stack Overflow用户
提问于 2012-06-14 02:11:23
回答 2查看 9.5K关注 0票数 3

我继承了大量的经典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注入。是这样吗,还是我在搜索这项基本任务上真的失败了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-14 02:16:26

最好的选择是使用参数化的查询。关于如何做到这一点,你必须检查一下:

在PHP中,PDO (和prepared statements)允许开发人员使用参数化查询来避免sql注入。

更新

可以,您可以在WHERE子句中指定参数,为此您可以使用ADODB.Command object,如下例所示:

代码语言:javascript
复制
' 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 
...

有关更多信息,请参阅我在上面发布的文章链接,或者如果你愿意,你可能想要更多地研究这个主题。

票数 9
EN

Stack Overflow用户

发布于 2012-06-14 02:19:34

我使用了两层防御:

  • 创建一个“cleanparameter”函数,每次从查询字符串或表单值调用时,都会使用它来调用该函数。该函数至少应该替换简单的引号,并将字符串截断为您传递的值。因此,例如,如果字段不能超过100个字符,您可以将其称为x= cleanparameter(request.querystring("x"),100)。这是
  • 使用参数化查询运行SQL指令

的第一道防线。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11020846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档