标题:求助,高手进来看看。。
只看楼主
yi90421
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-5-20
 问题点数:0 回复次数:9 
求助,高手进来看看。。
有一登陆界面,输入字母、符号不用密码也能进去,而且加了判断也没用,麻烦各位高手帮忙看看:
代码如下:
<!--#include file="..\Data\Data_connect.asp"-->
<%
uid=trim(Request("user_name"))
upwd=trim(Request("user_password"))
role=trim(Request("user_role"))

if uid="" then
  Response.Write "<script language=JavaScript>{window.alert('登录帐号不得为空!');window.history.go(-1);}</script>"
end if
if instr(1,uid,",")>=1 then
  Response.Write "<script language=JavaScript>{window.alert('登录帐号不得包含逗号!');window.history.go(-1);}</script>"
end if
if instr(1,uid,"'")>=1 then
  Response.Write "<script language=JavaScript>{window.alert('登录帐号不得包含单引号!');window.history.go(-1);}</script>"
end if
   '判断帐号及密码是否正确
set recCheckUser=server.CreateObject("ADODB.recordset")
if role="教 师" then
strSQL="select * from [user] where name_id='"&uid& "' and password='"&upwd& "'"
recCheckUser.Open strSQL,conn,1,1
if not recCheckUser.EOF then
    '如果用户帐号及密码正确
    session("User")=uid
    Session("Department")=recCheckUser("department")
    response.redirect "../Worker/index.asp"
else
    '用户帐号及密码不正确
      recCheckUser.Close
      set recCheckUser=nothing
      set conn=nothing
    Response.Write "<script language=JavaScript>{window.alert('您输入的帐号及密码错误,请重新输入!');window.history.go(-1);}</script>"
end if
end if
if role="管 理" then
strSQL="select * from [admin] where name='"&uid& "' and password='"&upwd& "'"
recCheckUser.Open strSQL,conn,1,1
if not recCheckUser.EOF then
    '如果用户帐号及密码正确   
    session("User")=uid
    Session("Department")=recCheckUser("department")
    Session("Role")=recCheckUser("role")
    response.redirect "../System/System_Index.asp"
else
    '用户帐号及密码不正确
      recCheckUser.Close
      set recCheckUser=nothing
      set conn=nothing
    Response.Write "<script language=JavaScript>{window.alert('您输入的管理员帐号及密码错误,请重新输入!');window.history.go(-1);}</script>"
end if
end if
%>
搜索更多相关主题的帖子: window 帐号 Response 
2008-06-08 14:51
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
.....
upwd=trim(Request("user_password"))
.....
if role="管 理" then
strSQL="select * from [admin] where name='"&uid& "' and password='"&upwd& "'"
recCheckUser.Open strSQL,conn,1,1
if not recCheckUser.EOF then
.....

所以如果我登陆时用的密码是>' or '1'='1<箭头中间的部分,那么strSQL就是
select * from admin where name='...' and password='' OR 1=1
于是就不是eof了,于是就登录成功了。
这就是为什么数据库里密码要哈希,登录时也要哈希,因为可以防止特殊符号(当然还有别的目的)。
2008-06-08 15:29
yi90421
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-5-20
得分:0 
那应该怎么修改呢
2008-06-08 15:59
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
replace(str,"'","‘")

2008-06-08 16:54
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
过滤单引号

2008-06-08 16:54
yi90421
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-5-20
得分:0 
现在是应该怎么改能判断字母,符号呢?因为现在字母,符号根本就不用验证就进到系统了,如果要加验证语句,应该怎么加呢?
2008-06-08 17:04
yi90421
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-5-20
得分:0 
现在是应该怎么改能判断字母,符号呢?因为现在字母,符号根本就不用验证就进到系统了,如果要加验证语句,应该怎么加呢?
2008-06-08 17:13
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
这样,一种思路是过滤(单)引号
upwd=Replace(upwd,"'","''")

一种思路(preferred)是给数据库里的密码字段哈希,就是说存进去的密码是哈希过的,登录时也用哈希过的用户输入的密码与数据库里的比对:
程序代码:
' 存入数据库的代码
rs("password")=Hash(request("pwd"))


' 登陆判断
strSQL="select id from My_Users where username='" & Replace(Request("username") & "","'","''") & "' and password=" & Hash(Request("pwd")) & "'"

hash函数要自己定,原则是减少碰撞概率。广泛使用的哈希函数是MD5,代码见任何asp的cms。
2008-06-08 18:30
yi90421
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-5-20
得分:0 
试了 还不行。。
2008-06-08 19:11
multiple19O2
Rank: 1
等 级:新手上路
帖 子:326
专家分:0
注 册:2007-8-29
得分:0 
“还不行”

不行也说说是怎么不行,是原来的漏洞还在,还是根本没法登录了?是更换了登录验证方式之后不会在数据库里加初始记录,还是不理解“哈希”的含义?
2008-06-08 19:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-218231-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.468704 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved