asp登陆验证(高手帮忙分析)

<%
session.timeout=30

ghao=trim(request.Form("ghao"))
pass=trim(request.form("pass"))

if ghao="" or pass="" then
response.Write("<script>alert('用户名或密不能为空!');</script>")
response.Write("<script>window.location.href='index.asp';</script>")
else

sql="select * from user where ghao='"&ghao&"' and pass='"&pass&"'"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1

if not rs.eof then
session("ghao")=ghao

else
response.Write("<script>alert('用户名或密码错误!');</script>")
response.Write("<script>window.location.href='index.asp';</script>")
response.End()
end if
end if
%>
让我困惑的是:
1.用户名为空,检查正确,可以出现提示,但在登陆框填写
资料后 提交就会报错:
ADODB.Recordset 错误 '800a0bb9'

引数中可能发生类型错误、超过可接受的定义范围、或与其他引数发生冲突。

/login.asp, 列17

大家看看我的if 判断有没有问题
:有程序比较严谨的,完善的登陆验证代码发一个上来参考一个也可以,我这个老是有问题,要ASP的,谢谢了---顺便说一下在写ASP程序时注意的单引号和双引号问题,捆饶了我好久,尤其是数据库操作的时候...

楼主你的代码没问题啊,你要分析什么?安全性吗?如果担心SQL注入安全,可以加代码,另外你可以规定用户名字和密码不能有非法字符才可以.

'防止SQL注入代码
Dim Query_Badword,Form_Badword,Err_Message,Err_Web,form_name

'------定义部份 头----------------------------------------------------------------------

Err_Message = 1 '处理方式:1=提示信息,2=转向页面,3=先提示再转向

Err_Web = "Err.Asp" '出错时转向的页面

Query_Badword="'‖and‖select‖update‖chr‖delete‖%20from‖;‖insert‖mid‖master.‖set‖chr(37)‖="

'在这部份定义get非法参数,使用"‖"号间隔

Form_Badword="'‖%‖&‖*‖#‖@‖=‖select‖and‖set‖delete" '在这部份定义post非法参数,使用"‖"号间隔

'------定义部份 尾-----------------------------------------------------------------------
'

On Error Resume Next

'----- 对 get query 值 的过滤.

if request.QueryString<>"" then
Chk_badword=split(Query_Badword,"‖")
FOR EACH Query_form_name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_form_name)),Chk_badword(i))<>0 Then
Select Case Err_Message
Case "1"
Response.Write "<Script Language=JavaScript>alert('传参错误!参数 "&form_name&" 的值中包含非法字符串!\n\n请不要在参数中出现:and update delete ; insert mid master 等非法字符!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('传参错误!参数 "&form_name&"的值中包含非法字符串!\n\n请不要在参数中出现:and update delete ; insert mid master 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
End if

'-----对 post 表 单值的过滤.

if request.form<>"" then
Chk_badword=split(Form_Badword,"‖")
FOR EACH form_name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(form_name)),Chk_badword(i))<>0 Then
Select Case Err_Message
Case "1"
Response.Write "<Script Language=JavaScript>alert('出错了!表单 "&form_name&" 的值中包含非法字符串!\n\n请不要在表单中出现: % & * # ( ) 等非法字符!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('出错了!参数 "&form_name&"的值中包含非法字符串!\n\n请不要在表单中出现: % & * # ( ) 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
end if

二次回答:
<!-- #include file="conn.asp" -->
<!-- #include file="inc/md5.asp" -->
<%
if Trim(Request.Form("login"))<>"" then

if Trim(Request.Form("admin_name"))="" then
response.write"<script>alert('请输入用户名!');history.back();</Script>"
response.end
else
admin_name=Trim(Request.Form("admin_name"))
end if

if Trim(Request.Form("admin_pass"))="" then
response.write"<script>alert('请输入密码!');history.back();</Script>"
response.end
else
admin_pass=md5(Trim(Request.Form("admin_pass")))
end if

if Trim(Request.Form("code"))="" then
response.write"<script>alert('请输入验证码!');history.back();</Script>"
response.end
end if

if request("code")="" or trim(Session("safenum"))<>trim(replace(request("code"),"'","")) then
response.write"<SCRIPT language=JavaScript>alert('请您输入正确的验证码!');"
response.write"javascript:history.go(-1)</SCRIPT>"
response.end
end if

set rs=server.createobject("adodb.recordset")
sql="select * from Admin where admin_name='"&admin_name&"'"
rs.open sql,conn,1,3
if rs.eof and rs.bof then
response.write"<script>alert('对不起您输入的用户名不正确,请输入正确的用户名!');history.back();</Script>"
response.end
else
if rs("admin_pass")<>admin_pass then
response.write"<script>alert('对不起您输入的密码错误,请输入正确的密码!');history.back();</Script>"
response.end
else
Response.Cookies("Mweb_Admin")("admin_name") = rs("admin_name")
Response.Cookies("Mweb_Admin")("admin_pass") = rs("admin_pass")
Response.Cookies("Mweb_Admin")("admin_id") = rs("id")
select case Trim(Request.Form("cook_time"))
case "1"
Response.Cookies("Mweb_Admin").Expires=FormatDateTime(DateAdd("d", 1, Date),vbLongDate)
case "2"
Response.Cookies("Mweb_Admin").Expires=FormatDateTime(DateAdd("d", 7, Date),vbLongDate)
case "3"
Response.Cookies("Mweb_Admin").Expires=FormatDateTime(DateAdd("d", 30, Date),vbLongDate)
case "4"
Response.Cookies("Mweb_Admin").Expires=FormatDateTime(DateAdd("d", 365, Date),vbLongDate)
end select
response.redirect "index.asp"
end if
end if
rs.close
set rs=nothing

end if
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title><%=homename_h%>----管理登录</title>
<style type="text/css">
<!--
@import url("css/css.css");
-->
</style>
</head>

<body>
<%
if Request.Cookies("Mweb_Admin")("admin_name")="" then
%>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="middle"><table width="554" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="518" align="center" valign="top" background="images/loginbg.jpg"><table width="554" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="203" height="70"> </td>
<td width="351"> </td>
</tr>
<tr>
<td height="185"> </td>
<td align="center"><table width="350" border="0" cellspacing="0" cellpadding="0">
<form name="form1" method="post" action="">
<tr>
<td width="86" height="25" align="right">用户名:</td>
<td colspan="2" align="left"> 
<INPUT name="admin_name" type="text" class="inputstyle" id="admin_name" size="30"></td>
</tr>
<tr>
<td height="25" align="right">密  码:</td>
<td colspan="2" align="left"> 
<INPUT name="admin_pass" type="password" class="inputstyle" id="admin_pass" size="30"></td>
</tr>
<tr>
<td height="25" align="right">Cookies:</td>
<td colspan="2" align="left"> 
<select name="cook_time" id="cook_time">
<option value="0">不保留</option>
<option value="1">保留一天</option>
<option value="2">保留一周</option>
<option value="3">保留一月</option>
<option value="4">保留一年</option>
</select>
</td>
</tr>
<tr>
<td height="25" align="right">验证码:</td>
<td width="74" align="left"> 
<INPUT name="code" type="text" class="inputstyle" id="code" size="6"></td>
<td width="190" align="left"><img src="inc/code/code.asp"></td>
</tr>
<tr>
<td height="35" colspan="3" align="center"><input name="login" type="submit" class="loginbotton" id="login" value=" 登 录 "></td>
</tr>
</form>
</table>
</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table>
<%
else
response.redirect "index.asp"
end if
%>
</body>
</html>
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-08-30
session.timeout=30
30秒内完成,过了为超时

ghao=trim(request.Form("ghao"))
pass=trim(request.form("pass"))
获取用户名和密码

if ghao="" or pass="" then
response.Write("<script>alert('用户名或密不能为空!');</script>")
response.Write("<script>window.location.href='index.asp';</script>")
检查用户名和密码是否为空,如果空的弹出提示并返回主页

else

sql="select * from user where ghao='"&ghao&"' and pass='"&pass&"'"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
如果不是,从数据库查找用户并对正密码

if not rs.eof then
session("ghao")=ghao
如果找到相符的,把session设为此用户名的session

else
response.Write("<script>alert('用户名或密码错误!');</script>")
response.Write("<script>window.location.href='index.asp';</script>")
response.End()
end if
end if
要是数据库没有相符的用户名和密码,弹出错误信息并返回首页

加上 dim ghao, pass
第2个回答  2007-08-30
ghao=trim(request.Form("ghao"))
pass=trim(request.form("pass"))
改为
ghao=trim(request.Form("ghao"))
ghao=replacr(ghao,"'","")
pass=trim(request.form("pass"))
这样作是为了过滤掉表单中的'

-----------------------------------
response.Write("<script>alert('用户名或密不能为空!');</script>")
response.Write("<script>window.location.href='index.asp';</script>")
改为
response.Write("<script>alert('用户名或密不能为空!');</script>")
response.Write("<script>window.location.href='index.asp';</script>")
response.end

------------------
sql="select * from user where ghao='"&ghao&"' and pass='"&pass&"'"
改为:
sql="select * from [user] where ghao='"&ghao&"' and pass='"&pass&"'"
这里给user加上[],因为user是系统保留字

寻求ASP高手帮忙分析下网站ACC数据库
。。。不用什么分析了 数据库一般都修改成后缀.asp的文件了 你找找 data目录 或者找找conn文件 里面都有提示~~=== 或者你搜索一下所有文件中 最大的一个asp文件 理论上它就是数据库文件~qq:714201612

高手帮帮忙
http:\/\/www.55188.com\/viewthread.php?tid=627383&fpage=1&highlight= 下面我从几个例子给大家分析: 例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个...

分析器错误信息: 无法识别的配置节“connectionStrings”高手帮忙
web.config配置文件,设置数据库连接字符串格式为:<appSettings> <add key="sqlConnectionString" value="Password=sa;Persist Security Info=False;User ID=sa;Initial Catalog=oa_db;Data Source=.;"> <\/add> <\/appSettings>

求电脑高手帮忙
另外也可能是硬件设备之间的兼容性不好造成的。 下面我从几个例子给大家分析: 例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,...

各位,高手,帮忙分析分析显卡的位宽、核心频率和显存频率、显存应该如何...
首先要说的是位宽,这个和显存频率是等效的,也就是说,在核心频率、流处理器数量、显存容量同样的情况下,如果位宽减半,显存频率翻倍,这个性能理论上是不变的。另外就是说核心频率和显存频率,一般来说,核心频率比显存频率更重要,这就是说100MHZ的核心频率的提升比100MHZ显存频率的提升更重要。流...

开机登录时提示内存不能为read,请高手帮忙分析一下这段二进制代码 谢谢...
1、驱动不稳定,与系统不兼容,这最容易出现内存不能为 Read 或者文件保护 2、系统安装了一个或者多个流氓软件,这出现 IE 或者系统崩溃的机会也比较大,也有可能出现文件保护 3、系统加载的程序或者系统正在运行的程序之间有冲突,尤其是部分杀毒软件监控程序 4、系统本身存在漏洞,导致容易受到网络攻击。...

找个JAVA高手帮忙分析下这段代码有什么问题,我在自学JAVA,现在写的这个...
有很多种可能哦,有可能是你的驱动有问题哦,你用的是2008还是2000还是2005,这些版本的驱动不同哦,还有在这里你没有用预处理,你为什么还要用preperStatement()这个方法呢,这样会降低效率的,没有预处理的时候还是用statement()吧

请matlab高手帮忙分析一下这个程序。详细解释每一步什么意思!答案满意...
你透露的信息太少了,起码应该告知一下这个程序是用来干什么的,大概用的是什么算法啊。看来只能猜了,从最后画出的图来看,感觉这个程序的目的用逼近的方法得到一条分界线的样子,具体是什么算法,看不出来。你看看我的注解,自己研究一下吧。在网页里可能显得比较乱,你复制粘贴到matlab的编辑器了再看...

帮忙分析一下ASP代码中的response.cookies方法哪里错了,大小写我也换...
LANGUAGE=JAVASCRIPT CODEPAGE=65001 var x x=Request.Cookies(x)if(x=){ Response.Cookies(x)=1 Response.Cookies(x).Expires= Date()+365;Response.Write(欢迎!这是您第一次访问本页面。)} else{ Response.Cookies(x) = parseInt(Request.Cookies(x))+1 Response.Write(今天你一共访问了+...

网站被入侵,里面php文件帮忙分析一下,谢谢!
而是指向了第三方网站,你的服务器等于免费为第三方做了流量广告啊!防护建议:关闭服务器文件上传接口(或使用文件加密服务、或使用动态文件上传路径),数据库服务使用SQL防注入验证规则,关闭服务器外网(第三方)访问请求服务(并将配置文件属性修改为只读)。

相似回答