也谈ASP技术实现站点加密

2008-02-23 05:31:32来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

本报去年第95期上有一篇名为“用ASP技术为您的站点加密”的文章,其中提出的登录方法存在安全隐患,假如真的使用这种方法来作为重要的站点的数据验证,任何一个懂得SQL语法和ASP的人都能够轻而易举地登录进入这个站点而不必知道什么用户名或密码。

  文中所给出的数据验证代码是通过“SELECT * FROM customer WHERE cust_id=′ ″ & request(″uid″) & ″ ′ and ′cust_pwd=′ ″ & request(″pwd″) & ″ ′ ″,并且判断此SQL语句返回的记录集是否为空来确定登录是否失败。其问题出在没有对收集到的uid信息和pwd信息进行任何预处理,从而使得用户能够在输入用户名和密码的时候使用“'”这个SQL的分隔符号,因此用户能够构造出这样的用户名和密码:uid=″ABC′ or ′1′=′1″,pwd=″ABC′ or ′1′=′1″。然后文中的数据验证部分会生成这样的一个SELECT语句并交由SQL Server执行:″SELECT * FROM customer WHERE cust_id=′ABC′ or ′1′=′1′ and cust_pwd=′ABC′ or ′1′=1′ ″。其返回的结果跟直接使用“SELECT * FROM customer”完全相同,返回全部的用户记录,所以后面的gbFound就会成为True,然后文中的系统会取出rsCust.Fileds(“cust_id”)和rsCust.Fileds(“cust_pwd”)存入Session变量中,也就是说取出了全部用户记录中的第一个用户的信息存入Session。至此,咱们这个没有任何授权的用户就已取得了跟第一名合法用户完全相同的身份了。

  一个真正可靠的ASP验证页面应该拥有数据预处理部分和多数据结果的补充验证,下面给出一个可靠的ASP验证代码:

  〈%@ Language=VBScript%〉

  〈%

    Dim myDSN

    dim na,pass

    ′下面是连接代码

    MyDSN = ″DSN=HotFoxDB;uid=superuser;DATABASE=HotFoxDB;pwd=″

    ′取得用户提交的用户名和密码

    na=trim(request.form(″name″))

    pass=trim(request.form(″password″))

    ′数据预处理,检测输入中是否存在 ′ 符号

    if (instr(na,″ ′ ″)〈〉0 or instr(pass,″ ′ ″)〈〉0) then

   ′假如有非法字符,转到登录失败页面

    Response.Redirect(″LogFail.HTM″)

    end if

    ′执行常规的SQL数据验证

    mySQL=″select * from userprofile where name=′ ″ & na & ″ ′ and pwd=′ ″ & pass & ″ ′ ″

    set rstmp = Server.CreateObject(″ADODB.Recordset″)

    rstmp.Open mySQL,myDSN,3

    ′检测是否返回多个数据记录

    if rstmp.recordcount〈〉1 then

        ′假如符合条件的记录不止一个,转到登录失败页面

     Response.Redirect(″LogFail.HTM″)

    else

       ′成功登录的处理部分

        session(″username″)=trim(rstmp.fields(″name″))

        session(″userdomain″)=trim(rstmp.fields(″domain″))

        session(″useraction″)=trim(rstmp.fields(″action″))

        rstmp.Close()

        set rstmp=nothing

       Response.Redirect(″Main.HTM″)

    end if

  %〉

  另外前文作者提出的在每个页面开头使用那段代码来验证的方法,最好应该改为使用INCLUDE,从而加快处理速度,并避免每个页面的头部过于冗长。具体方法是将那段代码单独存为一个Certify.ASP,然后每个页面开头加入〈!--#INCLUDE FILE=″Certify.ASP″--〉就能够了。



标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 在ASP中使用存储过程

下一篇: 在ASP中利用“正则表达式” 对象实现UBB风格的论坛

热门词条
热门标签