紧急求救,关于asp的密码验证 (200分)

  • 主题发起人 主题发起人 form2
  • 开始时间 开始时间
F

form2

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么别人可以得到超级用户的权限?难道代码有问题吗?
myemail:form2@163.com

<%
dim rs
Name1=request.form("UserName")
PW1=request.form("PassWd")
set rs=server.CreateObject("ADODB.RecordSet")
rs.open "select * from admin where UserName='" & Name1 & "'",conn,1
if pw1<>rs("passwd") then
response.write "Sorry,请输入正确的管理员名字和密码"
else
session("UserName")=RS("Username")
session("KEY")=rs("myKEY")
response.redirect "main.asp"
end if
rs.close
%>
 
对ASP什么的不熟悉呀
 
这种验证方式有问题,你应该在取得Name1时过滤掉一些字符,如:"""、"'"、"<"、">"、"%"等
等,特别是那个单引号。
 
如果我在密码框中输入: ' or '1'='1 那你的超级用户不等于没有用户了。:)
 
bpc说的只是一个程序漏洞,并不是搂主问的问题。
这种问题没什么好方法,只有一步一步跟代码了。
Response.end - ASP的调适器,看看最后
session("UserName")=RS("Username")和session("KEY")=rs("myKEY")的值取道没有。
 
to:特尔斐
谢谢,我正是考虑了你的顾虑,才这样写的代码,单独起另外一行判断密码
通过定做Name1不一定能实现你的顾虑

to:bpc
我认为你是错的,因为pw1只是一个字符串引用而已,asp解释程序不会对pw1再次解释!
就算你的是正确的,你的回答将成为下面语句,:)也是错误的,甚至我使用了isnull(pw1)
if '' or '1'='1' <>rs("passwd") then
 
判断密码正确与否前要先判断一下是否数据为空,否则只要用户名对就是管理员了
 
名字里不许有引号
 
谁能针对上面的代码写一个,定做的用户名或密码?
说真的,我觉得,你们不管怎么定作用户名,也影响不到pwd的检查!

因为if pw1<>rs("passwd") then不能被绕过,定做用户名,只能有2个结果
rs要么有,要么空。
而我测试了如果用户名相同,有错误密码和没密码,一样的出错!

热切期盼,希望高手解决问题,如果不方便在这里说,请form2@163.com联系,谢谢!
 
你在response.redirect "main.asp"这句代码前加一句 Response.write rs("myKEY")
把 rs("myKEY") 的值输出来看看是什么。
如果这里没得到值,你就把 sql = "select * from admin where UserName='" & Name1 & "'"
这行代码输出来放到SQL里执行一下,看具体的数据集。总之ASP的错误要以一步一步的往下查。
 
<%
dim rs
Name1=request.form("UserName")
PW1=request.form("PassWd")
set rs=server.CreateObject("ADODB.RecordSet")
rs.open "select * from admin where UserName='" & Name1 & "'",conn,1
if not rs.eof then
if pw1<>rs("passwd") then
response.write "Sorry,请输入正确的管理员名字和密码"
response.end
else
session("UserName")=RS("Username")
session("KEY")=rs("myKEY")
response.redirect "main.asp"
end if
else
response.write "没有找到的用户名"
response.end
end if
rs.close
%>
 
没错,你select出来的纪录可能不止一条。就是说有用户名重复的纪录。
 
看来只有象上面这样了,我不能和对方预约
只有等了,嘿嘿增加了,IP/MAC的记录,希望有用
 
xygz,写得对~
不过得加上 特尔斐 的过滤非法字符
 
后退
顶部