阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某高校开发了一套基于Web的教务管理系统,实现教务管理人员课程设置、学生选课和成绩查询、教师上传成绩以及特殊情况下教务处对成绩进行修改等功能。系统基于JavaEE平台实现,采用表单(Form)实现用户数据的提交并与用户交互。系统要支持:(1)在特定时期内100个用户并发时,主要功能的处理能力至少要达到10个请求/秒,平均数据量8KB/请求;(2)用户可以通过不同的移动设备、操作系统和浏览器进行访问。
【问题1】简要叙述教务管理系统表单测试的主要测试内容。
【问题2】简要叙述为了达到系统要支持的(2),一需要进行哪些兼容性测试,并设计一个兼容性测试矩阵。
【问题3】在满足系统要支持的(1)时,计算系统的通信吞吐量。
【问题4】系统实现时,对成绩更新所用的SQL语句如下:
设计1个测试用例,以测试该SQL语句是否能防止SQL注入,并说明该语句是否能防止SQL注入,以及如何防止SQL注入。
参考答案:
【问题1】表单测试是Web应用功能测试的重要内容,教务管理系统主要测试如下内容:①每个字段的验证:②字段的缺省值;③表单中的输入;④提交操作的完整性。
【问题2】“教务管理系统”的兼容性测试:①平台兼容性和浏览器兼容性。②兼容性测试矩阵如下:
【问题3】通信吞吐量:P=N(并发用户的数量=100)×T(每单位时间的在线事务数量=10)×D(事务服务器每次处理的数据负载=8KB/s)=100×10×8=8000KB/s。
【问题4】设计如下测试:【注:设计类似如下用例的一个即可,其中包含SQL功能符号使SQL变为不符合设计意图即可,如包含',DROP等】。
(1)intClientSubmitScore:100--,strStudentID:20130002,则该SQL变为:
(2)intClientSubmitScore:100,strStudentID:20130002';DROPTABLEStudentScore--,则该SQL语句变为:
从测试用例所拼接处的SQL可以看出,该SQL语句不安全,容易造成SQL注入。防止SQL注入的方法主要有:拼接SQL之前对特殊符号进行转义,使其不作为SQL语句的功能符号。
解析:
本题考查Web应用测试相关内容。Web应用测试除了类似传统软件系统测试性能测试、压力测试等之外,还需要测试链接、浏览器、表单和可用性等多个方面。
【问题1】本问题考查表单测试的主要内容。表单是Web应用的重要组成部分,用于获取用户的信息并和用户进行交互。因此,表单测试是Web应用功能测试的重要内容,需要测试:①首先检查每个字段的所有验证:②检查字段的缺省值;③表单中的错误输入:④如果有创建、删除、查看和修改表单,要进行测试。
【问题2】本问题考查Web应用兼容性测试的内容。Web应用的兼容性是测试工作的重要方面,包括:浏览器兼容性、操作系统平台兼容性、移动浏览、打印选项等。本系统用户可以通过不同的移动设备、操作系统和浏览器进行访问,因此需要针对普通设备和移动设备,进行操作系统平台和浏览器的兼容性测试。
【问题3】本问题考查Web应用系统的性能指标计算。通信吞吐量,设定如下指标参数:N:并发用户的数量;T:每单位时间的在线事务数量;D:事务服务器每次处理的数据负载;P:系统的通信吞吐量。有如下计算公式:P=N×T×D本题中系统要求支持的(1)中给出100个用户并发,即N=100;主要功能的处理能力至少要达到10个请求/秒,即T=10;平均数据量8KB/请求,即D=10KB/s。则:通信吞吐量P=100×10×8=8000KB/s
【问题4】本问题考查Web应用安全性方面的SQL注入,SQL注入是Web应用安全性测试的重要方面。许多Web应用系统采用某种数据库,接收用户从Web页面中输入,完成展示相关存储的数据(如检查用户登录信息)、将输入数据存储到数据库(如用户输入表单中数据域并点击提交后,系统将信息存入数据库)等操作。在有些情况下,将用户输入的数据和设计好的SQL框架拼接后提交给数据库执行,就可能存在用户输入的数据并非设计的正确格式,从而给恶意用户提供了破坏的机会。即SQL注入。恶意用户输入不期望的数据,拼接后提交给数据库执行,造成可能使用其他用户身份、查看其他用户的私密信息,还可能修改数据库的结构,甚至是删除应用的数据库表等严重后果。因此需要在测试阶段进行认真严格的测试。本系统实现时,对成绩更新所用的如下SQL语句:
采用拼接字符串方式,无法防止SQL注入。例如intClientSubmitScore:100--,strStudentID:20130002,则该SQL变为:
--是SQL中注释符号,其后的内容为注释,这样上述语句中--之后的内容变为注释,只要StudentScore表中所有的记录的score都变为100,而没有受到WHERE子句后的学号限制。再比如intClientSubmitScore:100,strStudentID:20130002'or'a='a,则该SQL变为:
因为'a'='a'条件总是成立,因此,SQL执行结果包括学生成绩表中所有行的score都更新为100分。更为严重的情况下,用户输入DROP等功能性命令,会造成数据库表的永久删除等严重后果,如strStudentID:20130002’;DROPTABLEStudentScore--,则该SQL语句变为:
防止SQL注入的方法主要有:拼接SQL之前对特殊符号进行转义或者等价方式,使其不作为SQL语句的功能符号。验证所有输入数据能从输入层面防止SQL注入。SQL注入在使用SSL的应用中仍然存在,甚至是防火墙也无法防止SQL注入。因此,在测试Web应用时,需要认真仔细设计测试用例,采用Web漏洞扫描工具等进行检查,以保证不存在SQL注入机会。