china.com
主页
新闻
体育
游戏
文化
教育
健康
财经
科技
旅游
军事
娱乐
商贸
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  


也谈ASP技术实现站点加密

2000-08-16 09:26:10

  本报去年第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″--〉就可以了。

  摘自《赛迪网》 林泉/文

404 Not Found

404 Not Found


nginx


科技检索


中华网推荐

  • 1000名医生在线咨询

  • 中国足球队官方网站

  • 鸦片玫瑰(新版)

  • 精选股票天地

  • 闪光的flash教程

  • 中华网汽车世界

  • 为你的爱情出谋划策

  • 网文精选——野百合集

  • 世界文化遗产在中国

  • 历届香港小姐风姿集



  •  


    网络教室编辑信箱
    版权声明 | 本站检索 | 联系方法 | 刊登广告 | 使用说明 | 关于中华网 | 豁免条款

    版权所有 中华网