防止经典ASP中的自由响应文本字段上的SQL注入
创建一个parameterized query而不是将用户的输入连接到查询中。
这里是如何在传统的ASP做到这一点: http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx
同样重要的是要注意,你可以从SQL注入100%安全的唯一方法是参数化使用用户输入的任何SQL语句,甚至一旦它在数据库中。示例:假设您通过参数化查询或存储过程进行用户输入。插入时您会很安全,但是您需要确保使用该输入的任何东西也使用参数。直接连接用户输入在任何地方都是一个坏主意,包括db内部。
如果您必须编写经典的ASP,请在JScript中执行,更好!而且,IIRC也表现更好。 – RedFilter 2010-01-11 20:45:56
@OrbMan:这是怎么一回事?如果您不介意隔离自己,那么JScript更好,但绝大多数ASP都在VBScript中。坦率地说,如果你不得不使用经典的ASP在VBScript中执行它,那么整合示例就容易多了,而且对于其他典型的ASP开发者来说更容易阅读。 – AnthonyWJones 2010-01-12 11:47:41
编辑:只是澄清。在sp中构建动态sql当然可能与在应用程序中构建动态sql一样危险,但将用户输入绑定到查询中可以防止sql注入,如此处所述(特定于oracle的讨论,但其他原理适用):
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:23863706595353
这不是动态SQL这是 问题(所有SQL是Oracle 实际动态 - 即使是在 PRO * C/PLSQL静态SQL)。这是sql的“ 构造”,即 问题。如果用户给你输入 - 他们应该绑定到查询 - 不连接。第二个 将用户输入连接到您的SQL --就好像您让他们能够传递您的代码,并且您执行该代码。干净利落。
不要相信它。存储过程可以防范SQL注入漏洞是一个谬论。您可能会像在应用程序代码中那样在过程中构建不安全的动态SQL查询。 – 2010-01-11 20:40:26
我不是主张在sp中构建动态sql,而是将文本字段条目作为参数提供给sp中的参数化语句。 – davek 2010-01-11 21:10:55
如果您搜索了http://stackoverflow.com/questions/tagged/sqlinjection,您会自己找到答案。 – 2010-01-11 20:34:48
@John你的意思是http://stackoverflow.com/questions/tagged/sql-injection+asp-classic,但其中一个被标记为重复。 – cregox 2010-08-13 19:05:25