zoukankan      html  css  js  c++  java
  • classic asp中使用ADODB.Command防止sql injection

    原始代码如下

    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'

  • 相关阅读:
    mac 卸载 node并重新安装
    最小的Django应用
    Python如何实现文本转语音
    Python语言库pyttsx3
    大数据资料
    剑指offer(29)最小的K个数
    剑指offer(28)数组中出现次数超过一半的数
    剑指offer(27)字符串的排列
    剑指offer(26)二叉搜索树与双向链表
    JS、JAVA刷题和C刷题的一个很重要的区别
  • 原文地址:https://www.cnblogs.com/vin-yuan/p/5231170.html
Copyright © 2011-2022 走看看