2026年10月押题密卷 · 选择题
某公司开发基于Web的招聘系统,采用Java EE系统架构。该系统实现时,对用户的登录判断所使用的动态SQL语句如下。 SELECT *FROM Users WHERE User Name="+strUserName+"AND Password="+strPassword+"; 以下关于该SQL语句的讨论中,正确的观点是( )。
[解析]依题意,对于该动态SQL 语句若采用拼接字符串方式,则无法防止SQL 注入。例如,若执行 测试用例“strUserName:Guo'or'a¹='a',strPassword:Zhu'or'a¹='a”, 则该SQL 语句变 为: SELECT *FROM Users WHERE User Name='Guo'or 'a¹='a'AND Password='Zhu' or'a'='a'; 由 于'a'='a '条件总是成立,因此SQL 的执行结果包括用户表中的所有行,系统就允许 以第一仃的身份进行登录。 再例如,若执行测试用例“strUserName:'Guo'--,strPassword:Zhu”, 则该SQL语句变 为: SELECT *FROMUsersWHEREUser_Name='Guo'--ANDPassword='Zhu'; 由于“--,是SQL中的注释符号,其后的内容为注释,因此上述语句中“--”之后的内容变为注释, 只要用户表中存在用户名为Guo, 系统就允许用户以Guo的身份登录,并以Guo的身份进行任何可进 行的操作。 更为严重的情况下,若用户输入"strUserName:'Guo';DROP table users_details;'--!”, 以及任何字符串作为strPassword, 该 SQL就变为: SELECT *FROM Users WHERE User_Name='Guo';DROPtable users_details; '--'AND Password='Zhu'; 这就造成数据库中users details表被永久删除。 防 止SQL注入的方法主要有:拼接SQL之前对特殊符号进行转义,使其不作为SQL语句的功能符 号。