gpt4 book ai didi

asp-classic - 针对 SQL 注入(inject)的经典 ASP 保护

转载 作者:行者123 更新时间:2023-12-03 07:44:31 30 4
gpt4 key购买 nike

我继承了大量目前缺少 SQL 注入(inject)保护的经典 ASP 代码,并且我正在努力解决它。我详细研究了这里提供的解决方案:Classic ASP SQL Injection Protection在数据库方面,我有一个 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) 来自 Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes? 中的答案我读到“对‘引用参数’过程发起攻击的一种方法是使用字符串截断。根据 MSDN,在 SQL Server 2000 SP4(和 SQL Server 2005 SP1)中,太长的字符串将被悄悄截断。”

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

3) 还有其他我应该注意的问题吗?还有其他方式注入(inject) SQL 吗?

注意:30 分钟的互联网搜索表明,经典 ASP 没有库可以防止 SQL 注入(inject)。是这样吗,还是我真的未能完成基本的搜索任务?

最佳答案

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

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

<小时/>

更新

是的,您可以在 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
...

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

关于asp-classic - 针对 SQL 注入(inject)的经典 ASP 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020846/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com