新微赢技术网

标题: 【求助】会员登陆问题 [打印本页]

作者: 黒設會    时间: 2010-1-10 02:36
标题: 【求助】会员登陆问题
<%
      dim sql,rs,username,userpwd
    username=request.Form("caccount")
    userpwd=request.Form("cpassword")
   
      sql="select * from T_User where username='" & username    & "'"
      set rs=server.CreateObject("adodb.recordset")
    rs.Open sql,conn,1,3   
   
    do while not rs.eof     
        if rs("username")=username then
            response.Redirect("index.asp")
        else
            response.Write("错误")
        end if
    loop
%>

这样写对吗?
我要完成的功能是:有一个表。表里面有十个用户,我随便用一个用户登陆。如果存在则显示成功。否则失败。
怎么做呢。
作者: 大天使路西法    时间: 2010-1-10 02:37
谢谢版主啊。
那应该怎么做才不会有漏洞呢
作者: 罗ぷ曼ㄉ帝Ke    时间: 2010-1-10 02:37
这样写有点小问题,不很错。而且注意有注入漏洞。

没有核对密码。

注意你的sql语句生成方式,在表里查询所有名称为什么什么什么的记录,按说要么没有,要么有一条,那么下面就不应该用do循环了,何况那个if肯定是真的(因为你搜记录的条件是他们相等),而是直接判断Rs.BOF or Rs.EOF,如果是真,那么用户不存在,如果是假,继续核对密码,Rs("password")=userpwd,如果相等,那么放行,如果不等,就是密码错误。

我简单改一下,我没有考虑注入漏洞,假定表里密码明文字段为password
<%
    dim sql,rs,username,userpwd
    username=request.Form("caccount")
    userpwd=request.Form("cpassword")
   
      sql="select * from T_User where username='" & username  & "' And password='" & userpwd & "'"
      set rs=server.CreateObject("adodb.recordset")
    rs.Open sql,conn,1,3   
      
    If Rs.BOF or Rs.EOF Then
        Response.Write "登录失败"    '可能是用户名错误,也可能是密码错误,总之是没有满足用户名和密码都符合的记录
        Response.End
    End If
   
    Response.Redirect "index.asp?info=登录成功"
%>
作者: 風雲々無心メ    时间: 2010-1-10 02:37
我试下改了以下代码,又出现一个错误啊。
    If Rs.BOF or Rs.EOF Then
        if rs("username")=username then ------此处为17行
            if rs("userpwd")=userpwd then
                Response.Redirect "index.asp"   
            else
                Response.Write "登录失败,密码错误"   
                Response.End
            end if
        else
            Response.Write "登录失败,用户名不存在或者错误"   
            Response.End
        end if
    End If

错误类型:
(0x80020009)
发生意外。
/TestDemo/UserLogin.asp, 第 17 行




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2