为何无法判断用户登陆的合法性

cucumberqlt 2003-04-01 08:24:52
小弟初学asp,现出现如下问题。
index页面上是两个文本区域:Name,pwd 获取信息并提交pass页面判断
pass页面判断信息是否在数据库中
数据库字段依次为:IID,name,pwd
pass.asp的全部代码如下
<% Response.Buffer=True %>
<%
dim rs
dim rstemp
dim selected
dim conn
dim strname,strpassword,sql
strname=request.form("Name")
strpassword=request.form("password")
set rs=server.createobject("adodb.recordset")
conn = "DBQ=" + server.mappath("message.mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
sql="select * from pass where name='" & strname & "'"
rs.open sql,conn,1,1
if not rs.EOF then
if session("pwd")= strpassword then
'session("name")=strname
response.redirect "exam.asp"
else
response.write "错误<br><br>"
end if
'else
'response.write "密码错误<br><br>"
end if
set rs=nothing
set conn=nothing
%>

希望各位大哥在回答时尽量写详细些




...全文
32 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fatcat_xp 2003-04-01
  • 打赏
  • 举报
回复
我也说说看。。。 大概是这样的
我先假设 1.htm 用于用户 输入帐号和密码// roger.asp 用户检验 menu.asp 为实际登陆的界面/好

1.htm 的我就不说了
从roger .asp 开始
<%
yes=0
no=0

admin_name=request.form("admin_name") '传递的值1
admin_pwd=request.form("admin_pwd") '传递的值2

Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
DBPath=server.MapPath("/database/admin.mdb")
conn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="&DBPath&";"
rs.Open "select * from admin",conn '连接数据库

numfields = rs.fields.count'

do while not rs.EOF
if ( admin_name=rs(0) and admin_pwd=rs(1) ) then
session("user_name_record")=admin_name
'定义了SESSION 变量
'用于判断时候登录过
yes=yes+1

else
no=no-1
end if
rs.movenext
loop

if (yes=0) then

response.write "<SCRIPT language=JavaScript>alert('验证错误,请重试!');"
response.write "this.location.href=1.htm';</SCRIPT>"

rs.close
set rs=nothing
conn.close
set conn=nothing

else

rs.close
set rs=nothing
conn.close
set conn=nothing

response.Redirect "menu.asp"
end if
%>
以上我 认为你应该可以理解 不过我是逐个验证整个数据库是否有 admin_name 这个字段的用户 如果没有 包括 密码不匹配 也是不允许的 也就是说 要是 2者都匹配 应该 yes 的值为1 否则 yes 会等于0 并且 yes =1 后并且 定义一个 session 变量存储 admin_name
并且直接转向到 menu.asp 所以 这个 应该没有什么问题
---------------------------------------------
再看 menu.asp
<%
yes=0
no=0

admin_name=session("user_name_record")

Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
DBPath=server.MapPath("/database/admin.mdb")
conn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="&DBPath&";"
rs.Open "select * from admin",conn

numfields = rs.fields.count

do while not rs.EOF
if ( admin_name=rs(0) ) then
yes=yes+1
else
no=no-1
end if

rs.movenext
loop

if (yes=0) then

rs.close
set rs=nothing
conn.close
set conn=nothing
response.write "<SCRIPT language=JavaScript>alert('未登录或操作超时');"
response.write "this.location.href='1.htm';</SCRIPT>"

else

rs.close
set rs=nothing
conn.close
set conn=nothing

end if
response.write " 欢迎光临 "

%>

这个 我明显写的 麻烦了些 把 session 变量 再次传递给某个变量验证 是否存在。 其实 不这样 直接 来个 if session(....) = empty then .... else ..... end if 也可以

若不存在 session 就返回 1.htm 若存在则给出 "欢迎光临" 的字样//

呵呵 我也是只菜鸟// 要是各位觉的我有什么问题 尽管说 我也好提高提高。。 谢谢各位啦。。~!!!!!!!!!!!

colork7 2003-04-01
  • 打赏
  • 举报
回复
同意 杨州小宝

这种语句 sql="select * from pass where name='" &strname &"' and pwd='"&strpassword&"'"
简直就是超级空子 如果用户名形如"uasename or 1=1" 那么系统认为为真 密码就失去作用了




本人方案如下
<% Response.Buffer=True %>
<%dim rs,rstemp,selected,conn,strname,strpassword,sql,i,number,pass


strname=trim(request.form("Name"))
strpassword=(request.form("password"))
if strname="" or strpassword="" then
response.write "<br>输入完整用户名和密码<br>"
response.end
end if

set conn=server.createobject("adodb.connection")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& server.mappath("message.mdb")"

set rs=server.createobject("adodb.recordset")
sql="select pwd from pass where name='" & strname & "'"
rs.open sql,conn,1

if rs.EOF then response.write "用户名错误<br><br>"

number=rs.recordcount


'''''''''''''''同用户名多用户

for i=1 to number

if strpassword=rs("pwd") then
response.cookies("name")=strname
pass=1
response.redirect "exam.asp"
else
pass=0
end if
i=i+1
rs.movenext
next
rs.close
set rs=nothing
set conn=nothing

if pass=0 then response.write "错误<br><br>"
%>
jobine 2003-04-01
  • 打赏
  • 举报
回复
if not rs.EOF then
if rs("pwd")= strpassword then
session("name")=strname
response.redirect "exam.asp"
else
response.write "密码错误<br><br>"
end if
else
response.write "错误<br><br>"
end if
cmsoft 2003-04-01
  • 打赏
  • 举报
回复
楼上的会给 'or 1=1'形式破解
cmsoft 2003-04-01
  • 打赏
  • 举报
回复
<% Response.Buffer=True %>
<%
dim rs
dim rstemp
dim selected
dim conn
dim strname,strpassword,sql
set conn=server.createobject("adodb.connection")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& server.mappath("message.mdb")"

strname=request.form("Name")
strpassword=request.form("password")

set rs=server.createobject("adodb.recordset")
sql="select * from pass where name='" & strname & "'"
rs.open sql,conn,1,1
if not rs.EOF and rs.recordcount=1 then
if trim(rs("pwd")) = strpassword and then
session("name")=strname
response.redirect "exam.asp"
else
response.write "错误<br><br>"
end if
end if
set rs=nothing
set conn=nothing
%>
youbest 2003-04-01
  • 打赏
  • 举报
回复
sql="select * from pass where name='" &strname &"' and pwd='"&strpassword&"'"
rs.open sql,conn,1,1
if not rs.EOF then
response.write "该用户存在"
else
response.write "密码错误<br><br>"
end if


这是比较简单的方法.
指南针考试系统是一个多角色在线培训考试系统,系统集成了用户管理、角色管理、题库管理、试题管理、考试管理、在线考试等功能,考试流程完善。实现一整套完整体系的考试系统,方便用户在此系统中进行练习并不断提升自己,在考试中不断进步。本系统采用前后端分离方式进行开发实现,使用springboot+vue来进行开发.考试时自动调用摄相头进行考试监控,以防止作弊。技术栈SpringBootMybatis-plusMySQL 5.7Vue全家桶ElementUIRedisSwagger阿里云OSSLog4j主要功能1. 权限控制本系统存在三个不同的角色,教师,管理员,学生三种用户,此系统是基于vue+springboot实现的前后端分离,用户权限校验通过JWT生成token令牌发放到用户,并根据令牌对用户的身份合法性进行校验。2. 在线考试学生用户在注册登录之后,可以在本系统进行在线的考试,考试可由教师和管理员进行布置并设置考试权限(公开,密码),考试题型分为 单选、多选、判断、简答题,并支持题目附带配图。考试过程中需开启摄像头进行考试,系统会自动抓拍考生实时考试状态。3. 成绩模块参加考试后的学生用户,在提交试卷后进入考试结果页面,页面会自动核对学生用户的逻辑题的对错,对于简答题需要老师或者超级管理员进行批阅。对于学生用户参与的考试,学生用户可以查看到考试的详情并可以查看到自己所错的逻辑题。4. 题库模块学生用户在题库模块中可以进行题目的功能训练,训练模式分为,顺序练习,随机练习,也可以根据题型练习(单选,多选,判断)。用户答题时会实时判断正确与否,并有错题解析功能。5. 题库管理超级管理员和教师可以对本考试系统已有的题库进行管理,实现对题库信息的CRUD操作6. 试题管理教师和系统管理员用户有权限对本系统的所有试题进行操作,本系统试题支持复杂类型的题目,考试题目支持多插图,选项答案支持单插图功能。7. 考试管理教师和系统管理员用户有权限对系统存在的考试进行操作,本系统考试支持公开考试和密码口令考试,并可以对考试进行禁用也可以在设置考试时间段,对于考试可以进行很便利的进行组卷,系统内置两种组卷模式,题库组卷和自由选题组卷。8. 考卷批阅对于本系统中存在的复杂考试的题目,可以又对应的老师进行批阅,此系统的逻辑题无需老师用户进行批阅,老师的工作仅仅是批阅简答题这种无准确答案类型的题目,极大地减轻了老师用户的工作量9. 考试统计本系统针对每一次考试进行数据统计和报表,让使用本系统的老师用户能够直观的了解到每一次考试人员的进步。10. 用户管理超级管理员可以对注册本系统用户的进行授权,并拥有操作一切用户的权限。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧