2010-04-27 33 views
2

来自PHP,我不得不做任何事先知道asp的这个1000文件asp经典网络应用程序的一些sql清理,并且在我开始攻击它之前,我想知道任何主要的陷阱注意在编写asp classic/sql参数时编写/制作asp空白的修改。什么是一些好的快速概览资源,我应该注意什么?我需要在asp classic中针对sql注入进行参数化,在开始进行更改之前,我应该花些时间了解哪些内容?

+0

http://stackoverflow.com/questions/2113262/sql-injection-on-classic-asp-pages-with-parameterized-queries-text-fields可能的重复 – 2010-04-27 21:12:13

回答

1
  1. 我会创建一个封装全部或大部分数据访问的函数。在以前的项目中,我创建了一个GetRecordset函数,该函数接受一条SQL语句并返回一个Recordset实例。在函数中,我打开数据库,执行查询,关闭数据库并返回记录集。这确保连接关闭。

  2. 我会创建一个清理SQL语句参数的函数,甚至更好的是使用参数化查询。在我不想重写查询并因此使用串联的代码中,我使用的函数需要一个vbVarType参数,以便我可以验证传递的值是否为所指示的类型,并确保日期的格式为并不特定于服务器的文化。

  3. 我会搜索单引号和双引号的实例。在这里你正在寻找Select ... Where StringOrDateCol = '" & Request.QueryString("GodKnowsWhat") & ...

即使所有这一切,你不会抓住一切。例如,你不会赶上Select ...Where NumericCol = " & Request.QueryString("GodKnowsWhat")。最终的搜索可能是在Select,Update,InsertDelete上搜索并检查每个SQL语句以确保它使用您在上面#2中创建的函数。

3

确保您没有使用字符串连接将参数值添加到SQL查询中。了解如何使用ADO Command和Parameter对象。总是在SQL查询字符串中使用占位符,并将Parameter对象添加到您的Command中以为占位符提供值。

1

同意......通过place-holder和ex:SqlDb.Command.Parameters.Add()进行参数化查询会有很大的帮助...不仅仅依赖选择,还可以使用插入注入和也删除。

相关问题