阅读以下说明,回答问题1至问题2,将解答填入答题纸对应的解答栏内。
【说明】
某留言系统采用ASP+Access开发,其后台管理登录页面如图4-1所示。
【问题1】(9分)
以下是该后台管理登录页面login.asp的部分代码,请仔细阅读该段代码,根据图4-1 将(1)~(9)的空缺代码补齐。
<!--jfoinclude file="conn.asp"-->
<!--jfoinclude file="md5.asp"-->
<!--jfoinclude file="bbb.asp"-->
<%
If request.Form("submit") = "管理登录" Then
user_name = request.Form("(1)")
password = request.Form(" (2)")
verifycode = request.Form("(3)")
If user name = "" Then
Call infoback(" 用户名不能为空! ")
End If
......
Set (4)= server.CreateObject("adodb.recordset")
sql = "select * from administrator(5)user_name='"&user-name&"'
and password='"&md5(password)&'''''
rs.Open(6),conn,1,1
If(7)rs .EOF Then
session("user name") = user_name
response.redirect "informltion.asp"
Else
Call infoback(" 用户名或密码错误! ")
End If
End If
%>
<html >
......
<body>
<form method="post" action="login.asp" id="login">
<h1> 管理员登录</h1>
<label for="user_name">用户名:
<input name="user_name" type""text" class="user_name" id="uname" size="25" />
</label>
<label for="password"> 密码:
<input name="password" type="password" id="pword" size="25" />
</label>
<label for="verifycode"> 验证码:
<input name="verifycode" type="text" class="verifycode" id="vcode" size="10" max1ength="4" />
<img src="code. asp" onclick=' 'javascript :this.src=' code .asp?tm=' +
Math.random()" style="cursor: )ointer" alt="单击更换" title="单击更换" />
</label>
<p class="center">
<input name="reset" type="(8)" class="submit" value="清除数据 " />
<input type="(9)" name="submit" class="submit" value=" 管理登录 " />
</p>
</form>
</body>
</html>
(1)~(9)备选答案如下:
A.pword B. where C. uname D. vcode E. reset
F.submit G. rs H. sql I. Not
【问题2】(6分)
1.在登录页面 login.asp 中通过<!--#include file=“bbB.asp”-->导入了bbB.asp的代码,以下是bbB.asp的部分代码,请仔细阅读该段代码,将空缺代码补齐。
<%
Dim GetFlag Rem( 提交方式)
Dim ErrorSql Rem( 非法字符)
Dirn RequestKey Rern( 提交数据) Dirn ForI Rern( 循环标记)
ErrorSql = "'~; ~and~(~) ~exec~update~count~*~%~chr~mid~master~truncate~char~declare" Rem(每个敏感字符或者词语请使用半角"~"格开)
ErrorSql = Split(ErrorSql ,"~")
If Request.ServerVariables("REQUEET_METHOD") = "GET" Then
GetFlag = True
Else
GetFlag = False
End If
If GetFlag Then
For Each RequestKey In Request .QueryString
For ForI = 0 To UBound(Erro Sql)
If InStr(LCase(Request.CueryString(RequestKey)) ,ErrorSql
(ForI))<>O Then
response.Write "<script>alert("" 警告:\n请不要使用特殊字符 \n比如英文的单引号’ "");history.go(-l);</script>"
Response. (10)
(11)
Next
(12)
(13)
For Each RequestKey In Request .Form
For ForI = 0 To UBound(ErrorSql)
......
%>
(10)~(13)备选答案如下:A.Else B.End If C.End D.Next
2.根据上述代码可以判断,登录页面login.asp导入bbB.asp的代码的目的是 (14) 。
()
【问题1】(9分,每空1分)
(1)C或uname
(2)A或pword
(3)D或vcode
(4)G或rs
(5)B或where
(6)H或sql
(7)I或Not
(8)E或reset
(9)F或submit
【问题2】(6分, 第14空2分)
(10)C或End
(11)B或End If
(12)D或Next
(13)A或Else
(14)ASP通用防止sql注入攻击
【问题1】
request.form方法:获取客户端表单信息(通常是POST方法提交的表单)。
user_name、password、varifycode为变量,分别用三个文本字段表单元素的ID结合request.form方法进行赋值。
语句Set rs = server. CreateObject(“adodb.recordset”)为建立数据记录集实例。
语句sql = “select * from administrator where user_name = “&user_name&”andpassword = “&md5(password)””为定义一条带条件查询的SQL语句(用sql引用)。
语句rs.Open sql,conn,1,1 为定义以只读方式打开数据集记录。一般情况下,执行rs.open sql .conn是查询数据库中是否有符合该SQL语句的记录,如果记录存在那么rs.Eof=false,如果不存在那么rs.eof=true,if not rs.eof就是如果记录集指针没有到达最后一条记录之前,指针继续下移。
【问题2】
该小问涉及的代码为ASP通用防止sql注入式攻击的代码。从作题来说,需要考生熟悉ASP条件判断语句If的语句格式,通常情况下其格式为:
If xxxx Then yyyy
Else zzzz
End If
若是在If语句内嵌套了If语句,则内嵌的If语句会有对应的End If语句。