loginok.asp
<%
DbPath = SERVER.MapPath("database.mdb")
′定义数据库名称为database.mdb
Set c1 = Server.CreateObject("ADODB.Connection")
c1.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DbPath
set rs=server.createobject("adodb.recordset")
rs.open ”select * from 用户表 where 用户名=’”&trim(request(“name”))&”’ and 密码=’”&trim(request(“pwd”))&”’”,c1,1,1
′进行循环查找,如果表中有符合条件的数据,验证通过,否则验证不通过
if rs.eof=false then
‘表示目前表中存在记录,数据没有到达表的结尾
response.write “验证通过”
else
response.write “验证失败”
end if
%> 在if rs.eof=false then也可以利用if rs.recordcount=1 then代替,表示数据库中存在一条满足条件的记录,由于身份验证程序不可能存在用户名和密码完全相同的两条记录,所以利用rs.recordcount对象进行判断能使初学者更容易理解程序。这种写法读者需要特别注意,千万不要把if rs.recordcount=1 then写成if rs.recordcount<>0 then,有些读者认为这两种写法都能够达到验证通过的作用,如果写成if rs.recordcount<>0 then,攻击者利用SQL在输入用户名的文本框中进行注入,从而通过select查询使数据库用户表中的所有记录全部满足条件,系统也会默认为登录成功,所以说这一点读者需要注意,由于SQL注入代码属于攻击性代码,这里就不对代码进行具体分析了。
|