【问题4】(5分)系统实现时,对用户的登录判断所用的动态SQL语句如下:“SELECT* FROM Users WHERE User_Name=‘”+strUserName+“‘AND Password=‘”+ strPassword+“’;”该SQL语句是否能防止SQL注入?请设计一个测试用例,以测试SQL注入,并说明防止SQL注入的方法。

题目

【问题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)使用存储过程,将传入的参数格式化校验

更多“【问题4】(5分) 系统实现时,对用户的登录判断所用的动态SQL语句如下: “SELECT* FROM Users WHERE ”相关问题
  • 第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


    正确答案:A
    BETWEEN…AND…是SQL中比较特殊的函数,经常与SQL联合使用用来设定查询条件,这个函数所设定的查询条件是值在某个范围内,并且包含边界取值,题目中WHERER所设定的条件是NOT(工资>3000 AND工资<2000),其含义不是在小于2000或大于3000的范围内,这恰好是在2000到3000之间,选项A使用BETWEEN ... AND...设定查询条件,与此条件实现的功能一致。故选项A为正确答案。选项B表示工资大于2000并且小于3000,选项C表示工资大于2000或者工资小于3000,选项D表示工资小于等于2000并且大于等于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


    正确答案:A
    解析:本题中SQL语句查询的是工资小于等于3000且大于等于2000的职工记录,与SQL中特殊运算符BETWEEN... EDN...等价,意思是在“…和…之间”。

  • 第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


    答案:C

  • 第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)


    正确答案:B
    解析:IN是包含运算,此处子查询中得到多个结果,记录不惟一,因此不用“=”运算符;EXISTS是谓词,用来检查在子查询中时候有结果返回。

  • 第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


    正确答案:A
    解析:BETWEEN…AND…是SQL中比较特殊的函数,经常与SQL联合使用用来设定查询条件,这个函数所设定的查询条件是值在某个范围内,并且包含边界取值,题目中WHERE所设定的条件是NOT(工资>3000 AND工资 2000),其含义不是在小于2000或大于3000的范围内,这恰好是在2000到3000之间,选项A使用 BETWEEN…AND…设定查询条件,与此条件实现的功能一致.故选项A为正确答案。选项B表示工资大于2000并且小于3000,选项C表示工资大干 2000或者工资小于3000,选项D表示工资小于等于 2000并且大于等于3000。