【问题4】(5分)
系统实现时,对用户的登录判断所用的动态SQL语句如下:
“SELECT* FROM Users WHERE User_Name=‘”+strUserName+“‘AND Password=‘”+ strPassword+“’;”
该SQL语句是否能防止SQL注入?请设计一个测试用例,以测试SQL注入,并说明防止SQL注入的方法。
【问题4】(5分)
该SQL语句不安全,容易造成SQL注入。
设计测试用例:
参考用例1:
strUserName: Zhang’-- strPassword: San
【注:上述用例将使得该SQL语句变为:
SELECT*FROM Users WHERE User_Name=‘Zhang’--AND Password =‘San’;
】
参考用例2:
strUserName: Zhang’or‘a’='a strPassword: San’ or‘a’='a
【注:上述用例将使得该SQL语句变为:
SELECT*FROM Users WHERE User_ Name=‘Zhang’ or‘a’='a'AND Password=
'San’ or‘a’='a’:
】
防止SQL注入的方法主要有:
1)拼接SQL之前对特殊符号进行转义,使其不作为SQL语句的功能符号
2)使用存储过程,将传入的参数格式化校验
第1题:
有SQL语句:SELECT * FROM 教师 WHERE NOT(工资>3000 OR 工资<2000)与如下语句等价的SQL语句是A)SELECT*FROM 教师 WHERE 工资 BETWEEN 2000 AND 3000B) SELECT*FROM 教师 WHERE 工资>2000 AND 工资<3000C)SELECT*FROM 教师 WHERE 工资>2000 OR 工资<3000D) SELECT*FROM 教师 WHERE 工资<=2000 AND 工资>3000
第2题:
有SQL语句 SELECT * FROM 教师 WHERE NOT(工资>30000R工资<2000) 与如上语句等价的SQL语句是
A.SELECT * FROM 教师 WHERE 工资 BETWEEN 2000 AND 3000
B.SELECT * FROM 教师 WHERE 工资>2000 AND工资<3000
C.SELECT * FROM 教师 WHERE 工资>2000 OR工资<3000
D.SELECT * FROM 教师 WHERE 工资<=2000 AND工资>=3000
第3题:
对由SELECT--FROM—WHERE—GROUP--ORDER组成的SQL语句,其在被DBMS处理时,各子句的执行次序为()
A.SELECT—FROM—GROUP—WHERE—ORDER
B.FROM——SELECT--WHERE——GROUP——ORDER
C.FROM——WHERE——GROUP——SELECT——ORDER
D.SELECT——FROM——WHERE——GROUP——ORDER
第4题:
有如下SQL语句: SELECT姓名FROM学生表WHERE学号IN; (SELECT学号FROM成绩表WHERE成绩>90) 下列哪条命令与该SQL语句等价
A.SELECT姓名FROM学生表WHERE EXISTS; (SELECT学号FROM成绩表WHERE成绩>90)
B.SELECT姓名FROM学生表WHERE EXISTS; (SELECT学号FROM成绩表WHERE学号=学生表.学号AND成绩>90)
C.SELECT姓名FROM学生表WHERE学号EXISTS; (SELECT学号FROM成绩表WHERE学号=学生表.学号AND成绩>90)
D. SELECT姓名FROM学生表WHERE学号=; (SELECT学号FROM成绩表WHERE成绩>90)
第5题:
有SQL语句: SELECT * FROM 教师 WHERE NOT (工资>3000 OR 工资<2000) 与如上语句等价的SQL语句是
A.SELECT*FROM 教师 WHERE 工资BETWEEN 2000 AND 3000
B.SELECT*FROM 教师 WHERE 工资>2000 AND 工资<3000
C.SELECT*FROM 教师 WHERE 工资>2000 OR 工资<3000
D.SELECT*FROM 教师 WHERE 工资<=2000 AND 工资>3000