classic asp中使用ADODB.Command防止sql injection
2016-03-01 15:20
806 查看
![](http://images2015.cnblogs.com/blog/695246/201603/695246-20160301151836658-1886112292.jpg)
原始代码如下
Set Conn = Server.CreateObject("Adodb.Connection") Conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source="&Server.MapPath("*****.mdb") sql="select * from users where username='"&request.Form("username")&"' and password='"&request.Form("password")&"'" rs.open sql,conn,1,1
这种拼接sql语句的做法不可取,有很大隐患,最常见的是在WHERE语句中添加恒等条件即可执行一些sql语句,进而获取大量信息,保险的方式是使用参数化的形式,大部分脚本语言例如PHP,js等都有类似处理,但由于传统的asp已经过时了,所以这方面资料较少,在查找和实践后,我将修改方式记录下来,避免大家绕远路。
…… set sql_cmd = Server.CreateObject("Adodb.Command") sql_cmd.ActiveConnection = Conn sql_cmd.CommandText = "select * from users where username=param1 and password=param2" //ADO.CreateParameter(name,type,direction,size,value) sql_cmd.Parameters.Append sql_cmd.CreateParameter("param1",202,1,20,request.Form("username")) //sql_cmd.CreateParameter("param1",adVarWChar,adParamInput,20,request.Form("username")),使用这种方式会出错,参数不识别adVarWChar,不知道为什么 sql_cmd.Parameters.Append sql_cmd.CreateParameter("param2",202,1,20,request.Form("password")) set rs = sql_cmd.Execute
参考:
1.使用 Command 对象调用示例存储过程
2.Filtering SQL injection from Classic ASP
3. ADODB.Command error '800a0bb9'
相关文章推荐
- 几种判断asp.net中session过期方法的比较
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
- 新手留言薄asp.net MVC 学习(适合新手学习)
- ASP.NET(C#)——唯一订单号
- Raspberry Pi 学习笔记之一
- asp.net单点登录(SSO)解决方案
- ASP.NET(C#)——日期函数
- asp.net 前台绑定后台变量方法总结
- ASP.NET开发知识总结
- 学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
- ASP.NET(C#)——关于后台变量和前台控件
- Metasploit 资源文件
- 《ASP.NET5》无法路由到Web API Controller控制器
- 面向对象设计原则--GRASP设计原则
- asp.net c#语言RFC连接SAP
- ASP.Net中常用的正则表达式
- asp.net获取文件绝对路径
- 7天 搞定 ASP.NET MVC - 第1天
- JavaSPI机制学习笔记
- ASP.NET内容页中访问母版页中的对象