【发布时间】:2010-04-27 20:02:18
【问题描述】:
来自 PHP,我必须在没有任何 asp 知识的情况下对这个 1000 个文件 asp 经典网络应用程序进行一些 sql 清理,在我开始破解它之前,我想知道任何主要的陷阱在 asp classic/sql 参数准备/进行 asp 空白修改中编码时要小心。有哪些不错的快速概览资源,我应该注意什么?
【问题讨论】:
标签: sql debugging asp-classic prepared-statement
来自 PHP,我必须在没有任何 asp 知识的情况下对这个 1000 个文件 asp 经典网络应用程序进行一些 sql 清理,在我开始破解它之前,我想知道任何主要的陷阱在 asp classic/sql 参数准备/进行 asp 空白修改中编码时要小心。有哪些不错的快速概览资源,我应该注意什么?
【问题讨论】:
标签: sql debugging asp-classic prepared-statement
确保您没有使用字符串连接将参数值添加到 SQL 查询。了解如何使用 ADO 命令和参数对象。始终在 SQL 查询字符串中使用占位符,并将 Parameter 对象添加到您的命令中以提供占位符的值。
【讨论】:
我将创建一个封装所有或大部分数据访问的函数。在之前的项目中,我创建了一个GetRecordset 函数,它接受一条 SQL 语句并返回一个 Recordset 实例。在函数中,我打开数据库,执行查询,关闭数据库并返回记录集。这样可以确保关闭连接。
我会创建一个函数来清理 SQL 语句的参数,或者更好的是使用参数化查询。在我不想重写查询并因此使用串联的代码中,我将使用的函数需要一个 vbVarType 参数,以便我可以验证传递的值是否属于指示的类型并确保将日期放入不特定于服务器文化的格式。
我会搜索单引号后跟双引号的实例。你在这里找Select ... Where StringOrDateCol = '" & Request.QueryString("GodKnowsWhat") & ...
即使有所有这些,你也不会捕捉到所有东西。例如,您不会捕捉到Select ...Where NumericCol = " & Request.QueryString("GodKnowsWhat")。最后的搜索可能是搜索Select、Update、Insert 和Delete,并检查每个 SQL 语句以确保它使用您在上面 #2 中创建的函数。
【讨论】:
同意...通过占位符进行参数化查询,例如:SqlDb.Command.Parameters.Add() 将有很大帮助...不要只依赖选择,您还可以使用插入和删除进行注入也是。
【讨论】: