个人专长: 胡扯,瞎掰,软件测试稍微靠谱
(空间无原创东西,全部来源网络,如有侵权请联系本人)
安全性测试
上一篇 /
下一篇 2008-05-22 13:38:52
/ 个人分类:测试基础
安全性测试
安全性测试主要是测试系统在没有授权的内部或者外部用户对系统进行攻击或者恶意破坏时如何进行处理,是否仍能保证数据和页面的安全。测试人员可以学习一些黑客技术,来对系统进行攻击。另外,对操作权限的测试也包含在安全性测试中。具体测试内容如下:
执行添加、删除、修改等动作中是否做过登录检测。
退出系统之后的操作是否可以完成。
所有插入表单操作中输入特殊字符是否可以正常输正常存储,特殊字符为:!?#¥%……—*()~——-+=[]{}、|;:‘”?/《》<>,。
在带有参数的回显数据的动作中更改参数,把参数改为特殊字符并加入操作语句看是否出错。
测试表单中有没有做标签检测,标签检测是否完整。
在插入表单中加入特殊的HTML代码,例如:<marquee>表单中的字本是否移动?</marquee>。
安全测试常见的10个问题
1, 问题:没有被验证的输入
测试方法:
数据类型(字符串,整型,实数,等)
允许的字符集
最小和最大的长度
是否允许空输入
参数是否是必须的
重复是否允许
数值范围
特定的值(枚举型)
特定的模式(正则表达式)
2, 问题:有问题的访问控制
测试方法:
主要用于需要验证用户身份以及权限的页面,复制该页面的url地址,关闭该页面以后,查看是否可以直接进入该复制好的地址
例:从一个页面链到另一个页面的间隙可以看到URL地址
直接输入该地址,可以看到自己没有权限的页面信息,
3 错误的认证和会话管理
分析:帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号。
浏览器缓存:认证和会话数据不应该作为GET的一部分来发送,应该使用POST,
4 问题:跨站脚本(XSS)
分析:攻击者使用跨站脚本来发送恶意代码给没有发觉的用户,窃取他机器上的任意资料
测试方法:
• HTML标签:<…>…</…>
• 转义字符:&(&);<(<);>(>); (空格);
• 脚本语言:
<scrīpt language=‘javascrīpt’>
…Alert(‘’)
</scrīpt>
• 特殊字符:‘ ’ < > /
• 最小和最大的长度
• 是否允许空输入
例:对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来
5,缓冲区溢出
分析:用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码。
6,注入式漏洞。
例:一个验证用户登陆的页面,
如果使用的sql语句为:
Select * from table A where username=’’ + username+’’ and pass word …..
Sql输入 ‘ or 1=1 ―― 就可以不输入任何password进行攻击
7,不恰当的异常处理
分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞,
8,不安全的存储
没有加密关键数据
例:view-source:http地址可以查看源代码
在页面输入密码,页面显示的是*****, 右键,查看源文件就可以看见刚才输入的密码,
9,拒绝服务
分析:攻击者可以从一个主机产生足够多的流量来耗尽狠多应用程序,最终使程序陷入瘫痪。需要做负载均衡来对付。
10,不安全的配置管理
分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护
程序员应该作的: 配置所有的安全机制,关掉所有不使用的服务,设置角色权限帐号,使用日志和警报。
软件安全测试涉及的方面
1.
输入的数据没有进行有效的控制和验证
包括:
l
数据类型(字符串,整型,实数,等)
l
允许的字符集
l
最小和最大的长度
l
是否允许空输入
l
参数是否是必须的
l
重复是否允许
l
数值范围
l
特定的值(枚举型)
l
特定的模式(正则表达式)
(注:建议尽量采用白名单)
2.
用户名和密码
l
是否设置密码最小长度
l
用户名和密码中是否可以有空格或回车?
l
是否允许密码和用户名一致
l
防恶意注册:可否用自动填表工具自动注册用户?
l
遗忘密码处理
l
有无缺省的超级用户?
l
有无超级密码?
l
是否有校验码?
l
密码错误次数有无限制?
3.
直接输入需要权限的网页地址可以访问
如:没有登录或注销登录后,直接输入登录后才能查看的页面的网址,能直接打开页面;
注销后,点浏览器上的后退,可以进行操作。
正常登录后,直接输入自己没有权限查看的页面的网址,可以打开页面。
4.
认证和会话数据作为GET的一部分来发送
认证和会话数据不应该作为GET的一部分来发送,应该使用POST
5.
隐藏域与CGI参数
分析:有此隐藏域中泄露了重要的信息,有时还可以暴露程序原代码。
直接修改CGI参数,就能绕过客户端的验证了。
如:<input type="hidden" name="h" value="http://XXX/checkout.php">
只要改变value的值就可能会把程序的原代码显示出来。
6.
上传文件没有限制
分析:上传文件最好要有格式的限制;
上传文件还要有大小的限制。
7.
把数据验证寄希望于客户端的验证
分析:客户端是不安全,重要的运算和算法不要在客户端运行。
重要的数据(如:密码)在客户端应该加密。
例:保存网页并对网页进行修改,使其绕过客户端的验证。(如只能选择的下拉框,对输入数据有特殊要求的文本框)
8.
跨站脚本(XSS)
分析:攻击者使用跨站脚本来发送恶意代码给没有发觉的用户,窃取他机器上的任意资料
测试方法:
HTML标签:<…>…</…>
转义字符:&(&);<(<);>(>); (空格);
脚本语言:
<scrīpt language=‘javascrīpt’>
…Alert(‘’)
</scrīpt>
特殊字符:‘ ’<
>
/
最小和最大的长度
是否允许空输入
例:对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来
9.
注入式漏洞(SQL注入)
分析:用户登录处、不用登录可以查看到的数据库中的数据列表尤为重要。
10.
不恰当的异常处理
分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞。
11. 不安全的存储
在页面输入密码,页面不显示“*****”;
数据库中存的密码没有经过加密;
地址栏中可以看到刚才填写的密码;
右键查看源文件就可以看见刚才输入的密码;
12. 不安全的配置管理
分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护
程序员应该作的:配置所有的安全机制,关掉所有不使用的服务,设置角色权限帐号,使用日志和警报。
例:数据库的帐号是不是默认为“sa”,密码(还有端口号)是不是直接写在配置文件里而没有进行加密。
13. 传输中的密码没有加密
分析:传输中的密码要进行加密。
传输前加密用SSL加密,https的方式提交用户名和密码;
如果使用tomcat做服务器的话,SSL加密只需配置就可以了:
TOMCAT用https替换http的方法
//////////////////////////////////////////////////////////////
首先用java的工具keytool 生成一个ssl证书:
keytool -genkey -keyalg RSA -alias youraliasname -keystore .keystore
输入keystore密码: yourpass
您的名字与姓氏是什么?
[Unknown]: liubin
您的组织单位名称是什么?
[Unknown]: test
您的组织名称是什么?
[Unknown]: www.test.com
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的州或省份名称是什么?
[Unknown]: beijing
该单位的两字母国家代码是什么
[Unknown]: cn
CN=liubin, OU=test, O=www.test.com, L=beijing, ST=beijing, C=cn 正确吗?
[否]: y
输入<CidSoftKey>的主密码
(如果和 keystore 密码相同,按回车):
相关阅读:
- 黑盒测试用例设计方法-边值分析法 (chenmaochuan, 2008-4-30)
- 测试的另类理解 (shen1936, 2008-5-09)
- 软件测试流程 (shen1936, 2008-5-13)
- BUG 参考标准 (shen1936, 2008-5-14)
- 需求分析的20条法则 (shen1936, 2008-5-14)
- 软件测试方法 (chenmaochuan, 2008-5-18)
- ISO9126质量模型 (chenmaochuan, 2008-5-18)
- 软件能力成熟度模型CMMI/CMM (chenmaochuan, 2008-5-18)
- 微软缺陷管理方法 (shen1936, 2008-5-19)
- 物理实验与软件测试 (shen1936, 2008-5-19)
收藏
举报
TAG:
测试基础