快速提问...我必须使用我正在清理的大量遗留 ASP 代码,并且它们都使用易受 SQL 注入攻击的查询。我有一个库,我把它放在一起用参数化查询替换它们,我想知道从安全角度来看,以下方法是否存在差异。
方法 1:这是大多数示例中显示的方法,其中参数对象是单独构建并添加到 Command 对象的。这是另一个问题的示例。
方法 2:使用带有参数值数组的 Command.Execute 方法。例子:
Command.CommandText = "select foo, bar from baz where a = ? and b = ?"
Command.Execute , Array(1, "BBB")
是的,Execute 的第一个参数被忽略。
第一种方法在构建每个参数时都指定了其类型、大小等,并且需要与数据库匹配。但是,如果一切都不是“刚刚”完美的话,我总是对这种方法、奇怪的错误和类似的问题感到困惑。所以我更喜欢后者,实际上它更适合我的编码风格,因为我可以将 DB 逻辑封装到一个类中并根据需要传递数组,而不必用大量的 DB 调用乱扔我的代码。
使用我的包装 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)
(传递关键字空表示不使用参数)
鉴于此,我想知道:方法#2 是否仍然可以免受 SQL 注入攻击?
谢谢。
编辑对 Execute 的调用是错误的,并且是从内存中写入的,它已被更正。