问答题
试题三(共20分)
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某大型匹萨加工和销售商为了有效管理匹萨的生产和销售情况,欲开发一套基于Web的信息系统。其主要功能为销售、生产控制、采购、运送、存储和财务管理等。系统采用JavaEE平台开发,页面中采用表单实现数据的提交与交互,使用图形(Graphics)以提升展示效果。
问答题
【问题1】(6分)
设计两个表单项输入测试用例,以测试XSS(跨站点脚本)攻击。系统设计时可以采用哪些技术手段防止此类攻击。
【正确答案】XSS (跨站点脚本攻击)是一种注入式攻击,主要通过恶意脚本进行攻击,任何脚本如
(2)click me!
防止的主要手段是对功能符号进行编码(转义)。
【答案解析】本问题考查Web应用安全性测试的XSS攻击。
XSS攻击测试是Web应用安全性测试的主要内容之一。
许多Web应用系统在某些情况下,接收页面上传的内容,并入新页面,作为新页面的内容。例如,在新闻网用户可以对新闻进行评论,用户可以输入如下带有HTML标记的内容:
在用户提交之后,标记将提交到服务器上,并在有新用户访问新的页面中显示,此时用户所看到的网页中包含以上标记的部分元素可能是:
从用户的角度看,该网页中就出现了弹出窗口提示,显示“Hello World!”。如下图所示:

即:用户输入的内容已经被浏览器成功执行。再如输入如下内容:
click me!
在用户提交之后,后续再访问时,用户所看到的网页中包含以上标记的部分元素可能是:
click me!
即新用户所看到网页中显示“Click me!”。当用户鼠标移过此文字时,就会弹出窗口(左侧为Chrome弹出,右侧为IE9直接给出的提示窗口,多次鼠标滑过操作Chrome 提示窗口多了一行浏览器对阻止这类代码的创建新窗口的选项,firefox类似):

问答题
【问题2】(3分)
简述图形测试的主要检查点。
【正确答案】图形测试的主要检查点如下:
(1)颜色饱和度和对比度是否合适;
(2)需要突出的链接的颜色是否存易识别;
(3)是否正确加载所有的图形。
【答案解析】本问题考查页面的展示效果方面的测试。
Web页面展示效果在用户界面友好性方面非常重要,是用户界面测试的主要内容之一。图形测试主要检查图片大小、颜色饱和度和对比度是否合适、需要突出的链接的颜色是否容易识别、是否正确加载等等。
问答题
【问题3】(5分)
简述页面测试的主要方面。
【正确答案】页面测试可以从以下几个方面进行:
(1)页面的一致性;
(2)在每个页面上是否设计友好的用户界面和直观的导航系统;
(3)是否考虑多种浏览器的需要;
(4)是否建立了页面文件的命名体系;
(5)是否充分考虑了合适的页面布局技术,如层叠样式表、表格和帧结构等。
【答案解析】本问题考查Web应用页面测试。
Web页面测试内容包括:页面一致性、用户友好性、浏览器兼容性、布局合理性、 直观的导航等。要关注页面是否一致,每个页面上是否设计友好的用户界面,导航系统是否直观,是否考虑浏览器的兼容性,元素布局是否合理,功能块布局是否合理,页面 颜色搭配是否合理,字体大小是否合理等方面。另外,还要考虑页面文件的命名体系是否建立。
问答题
【问题4】(6分)
系统实现时,对销售订单的更新所用的SQL语句如下:
PreparedStatement pStmt = connection.prepareStatement ("UPDATE SalesOrder SET status = ? WHERE OrderID= ?")
然后通过setString(...);的方式设置参数值后加以执行。
设计测试用例以测试SQL注入,并说明该实现是否能防止SQL注入。
【正确答案】设计如下测试:【注:设计类似如下用例即可,其中包含SQL功能符号使SQL变为不符合设计意图即可】
status:'fulfilled' -- , OrderID: '2014' OR '1' = '1'
采用传递参数的形式,Java的JDBC驱动自动会将其按照相应的类型处理,功能符号会进行转义。因此,该SQL语句是安全。
【答案解析】本问题考查Web应用安全性方面的SQL注入,SQL注入是Web应用安全性测试的
重要方面之一。
许多Web应用系统采用某种数据库,接收用户从Web页面中输入,完成展示相关存储的数据(如检查用户登录信息)、将输入数据存储到数据库(如用户输入表单中数据 域并点击提交后,系统将信息存入数据库)等操作。在有些情况下,将用户输入的数据 和设计好的SQL框架拼接后提交给数据库执行,就可能存在用户输入的数据并非设计的正确格式,就给恶意用户提供了破坏的机会,即SQL注入。恶意用户输入不期望的数据, 拼接后提交给数据库执行,造成可能使用其他用户身份,查看其他用户的私密信息,还可能修改数据库的结构,甚至是删除应用的数据库表等严重后果。SQL注入在使用SSL的应用中仍然存在,甚至是防火墙也无法防止SQL注入。因此,在测试Web应用时,需要认真仔细设计测试用例,采用Web漏洞扫描工具等进行检査,进行认真严格的测试, 以保证不存在SQL注入机会。
本系统实现时,对销售订单的更新所用的SQL语句如下:
PreparedStatement pStmt = connection.prepareStatement ("UPDATE SalesOrder SET status = ? WHERE OrderID= ?;");
然后通过setString(...);的方式设置参数值后加以执行。
在SQL语句中采用参数的方式传递前台传递来的值,因为不论是什么值,都会只作为setString(...)的参数值,不会作为SQL语句的其他功能符,所以本SQL语句更新订单的方式是防止SQL注入的。设计如下测试SQL注入的测试用例:
status:'fulfilled' -- , OrderID: '2014' OR '1' = '1'
检查执行结果,或者传递给数据库的SQL语句,会发现所有用例中的功能字符都会 经过特定的转义后作为status和OrderlD的值。和拼接SQL的方式不同,采用参数形式传递时,Java的JDBC驱动自动会将其按照相应的类型处理,功能符号会进行转义。因 此,测试用例中的注释--、OR等都会作为参数的值,不会作为功能符,也就不会改变 SQL语句本身的功能结构,该SQL语句是安全的。