security - 使用参数数组和 SQL 注入(inject)执行 ADO Command.Execute

标签 security asp-classic vbscript sql-injection ado

简单的问题...我必须使用大量正在清理的遗留 ASP 代码,并且它们都使用容易受到 SQL 注入(inject)攻击的查询。我有一个库,我将它们放在一起用参数化查询替换它们,我想知道以下方法从安全角度来看是否存在差异。

方法 1:这是大多数示例中显示的方法,其中单独构建参数对象并将其添加到 Command 对象。 Here's an example from another question .

方法 2:使用带有参数值数组的 Command.Execute 方法。示例:

Command.CommandText = "select foo, bar from baz where a = ? and b = ?"
Command.Execute , Array(1, "BBB")

是的,忽略执行的第一个参数。

第一种方法指定了每个参数的类型、大小等,并且需要与数据库匹配。但如果一切都不是“刚刚”完美的话,我总是会遇到这种方法的麻烦,奇怪的错误等等。所以我更喜欢后者,事实上它更适合我的编码风格,因为我可以将数据库逻辑封装到一个类中并根据需要传递数组,而不必在代码中添加大量数据库来电。

使用我的包装器 DB.Query 方法的方法 #2 示例:

set rs = DB.Query("select foo, bar from baz where a = ? and b = ?", Array(1, "BBB")

或者:

set rs = DB.Query("select foo, bar from baz", empty)

(传递关键字empty表示未使用该参数)

鉴于此,我想知道:方法 #2 仍然可以免受 SQL 注入(inject)攻击吗?

谢谢。

编辑对 Execute 的调用是错误的,是根据内存编写的,已更正。

最佳答案

从我的角度来看:是的。

我编写了一个快速示例,然后使用 Visual Studio 对其进行了调试。调用后

Command.Execute , Array(1, "BBB")

ADODB.Command 的参数对象已正确填充数组中的给定值。参数的数据类型和长度设置正确。

因此,在我看来,这种方法与方法#1(使用手动创建的参数对象)一样安全。

关于security - 使用参数数组和 SQL 注入(inject)执行 ADO Command.Execute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371437/

相关文章:

c# - 我可以允许匿名用户和事件目录用户浏览同一个 IIS 7.5 站点吗?

java - 无需 PIN 码即可读取智能卡信息?

javascript - 在 ASP 服务器端获取选定复选框值的数组

javascript - 如何从 JScript 执行 VBScript 代码?

vbscript - 仅获取子文件夹的文件夹大小,而忽略任何其他内容?

excel - 我的代码如何确定它是作为 VBScript、.HTA 还是 VBA 运行的?

html - .htaccess 这个网页有一个重定向循环 htaccess

c - 在命令行中隐藏密码字段

javascript - 动态网页的快捷方式

javascript - 谷歌地图自动缩放