网站测试中如何做好安全性测试

网站测试中如何做好安全性测试
安全性测试(security testing)是有关验证应用程序的安全服务和识别潜在安全性缺陷的过程。       
注意:安全性测试并不最终证明应用程序是安全的,而是用于验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。
       以下是我读<<软件评测试教程>>中的Web安全性测试章节内容,并进行修改的笔记,前面看了好多朋友写的,不过不是很全,希望对大家有所帮助,建议大家还是买本<<软件评测试教程>>此书绝对物超所值^_^
       WEB安全性测试
       一个完整的WEB安全性测试可以从部署与基础结构、输入验证、身份验证、授权、配置管理、敏感数据、会话管理、加密。参数操作、异常管理、审核和日志记录等几个方面入手。
       1.安全体系测试
       1)部署与基础结构
       网络是否提供了安全的通信
       部署拓扑结构是否包括内部的防火墙
       部署拓扑结构中是否包括远程应用程序服务器
       基础结构安全性需求的限制是什么
       目标环境支持怎样的信任级别
       2)输入验证
       如何验证输入
       A.是否清楚入口点
       B.是否清楚信任边界
       C.是否验证Web页输入
       D.是否对传递到组件或Web服务的参数进行验证
       E.是否验证从数据库中检索的数据
       F.是否将方法集中起来
       G.是否依赖客户端的验证
       H.应用程序是否易受SQL注入攻击
       I.应用程序是否易受XSS攻击
       如何处理输入
       3)身份验证
       是否区分公共访问和受限访问
       是否明确服务帐户要求
       如何验证调用者身份
       如何验证数据库的身份
       是否强制试用帐户管理措施
       4)授权
       如何向最终用户授权
       如何在数据库中授权应用程序
       如何将访问限定于系统级资源
       5)配置管理
       是否支持远程管理
       是否保证配置存储的安全
       是否隔离管理员特权
   6)敏感数据
       是否存储机密信息
       如何存储敏感数据
       是否在网络中传递敏感数据
       是否记录敏感数据
       7)会话管理
       如何交换会话标识符
       是否限制会话生存期
       如何确保会话存储状态的安全
       8)加密
       为何使用特定的算法
       如何确保加密密钥的安全性
       9)参数操作
       是否验证所有的输入参数
       是否在参数过程中传递敏感数据
       是否为了安全问题而使用HTTP头数据
       10)异常管理
       是否使用结构化的异常处理
       是否向客户端公开了太多的信息
       11)审核和日志记录
       是否明确了要审核的活动
       是否考虑如何流动原始调用这身份
       2.应用及传输安全
       WEB应用系统的安全性从使用角度可以分为应用级的安全与传输级的安全,安全性测试也可以从这两方面入手。
       应用级的安全测试的主要目的是查找Web系统自身程序设计中存在的安全隐患,主要测试区域如下。
       注册与登陆:现在的Web应用系统基本采用先注册,后登录的方式。
       A.必须测试有效和无效的用户名和密码
       B.要注意是否存在大小写敏感,
       C.可以尝试多少次的限制
       D.是否可以不登录而直接浏览某个页面等。
       在线超时:Web应用系统是否有超时的限制,也就是说,用户登陆一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
       操作留痕:为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进入了日志文件,是否可追踪。
       备份与恢复:为了防范系统的意外崩溃造成的数据丢失,备份与恢复手段是一个Web系统的必备功能。备份与恢复根据Web系统对安全性的要求可以采用多种手段,如数据库增量备份、数据库完全备份、系统完全备份等。出于更高的安全性要求,某些实时系统经常会采用双机热备或多级热备。除了对于这些备份与恢复方式进行验证测试以外,还要评估这种备份与恢复方式是否满足Web系统的安全性需求。
       传输级的安全测试是考虑到Web系统的传输的特殊性,重点测试数据经客户端传送到服务器端可能存在的安全漏洞,以及服务器防范非法访问的能力。一般测试项目包括以下几个方面。
       HTTPS和SSL测试:默认的情况下,安全HTTP(Soure HTTP)通过安全套接字SSL(Source Socket Layer)协议在端口443上使用普通的HTTP。HTTPS使用的公共密钥的加密长度决定的HTTPS的安全级别,但从某种意义上来说,安全性的保证是以损失性能为代价的。除了还要测试加密是否正确,检查信息的完整性和确认HTTPS的安全级别外,还要注意在此安全级别下,其性能是否达到要求。
       服务器端的脚本漏洞检查:存在于服务器端的脚本常常构成安全漏洞,这些漏洞又往往被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
       防火墙测试:防火墙是一种主要用于防护非法访问的路由器,在Web系统中是很常用的一种安全系统。防火墙测试是一个很大很专业的课题。这里所涉及的只是对防火墙功能、设置进行测试,以判断本Web系统的安全需求。
       另推荐安全性测试工具:
       Watchfire AppScan:商业网页漏洞扫描器(此工具好像被IBM收购了,所以推荐在第一位)
       AppScan按照应用程序开发生命周期进行安全测试,早在开发阶段就进行单元测试和安全保证。Appscan能够扫描多种常见漏洞,例如跨网站脚本、HTTP应答切开、参数篡改、隐藏值篡改、后门/调试选项和缓冲区溢出等等。

个人认为网站安全测试应分为两部分:安全体制测试和应用与传输安全测试。以下为简单说明:

  一.安全体制测试

  1.部署与基础结构

  网络是否提供了安全的通信。

  部署拓扑结构是否包括内部防火墙。

  部署拓扑结构中是否包括远程应用程序服务器。

  基础结构安全性要求的限制是什么。

  目标环境支持怎样的信任级别。

  2.输入验证

  是否清楚入口点

  是否清楚信任边界

  是否验证web页输入

  是否对传递到组件或web服务的参数进行验证

  是否验证从数据库中检索的数据

  是否依赖客户端的验证

  应用程序是否易受规范化问题的影响

  应用程序是否易受SQL注入攻击

  应用程序是否易受XSS攻击

  3.身份验证

  是否区分公共访问和受限访问

  是否明确服务帐户要求

  是否在网络中传递明文凭据

  是否实现自己的用户存储

  是否使用表单身份验证

  是否使用SQL身份验证

  是否使用进程帐户

  是否使用服务帐户

  是否考虑使用匿名Internet用户身份

  是否使用原始用户身份

  如何保存数据库连接字符串

  是否强制使用强帐户管理措施

  4.授权

  是否使用深层防御策略

  使用了哪些网关守卫

  是否使用基于角色的方法

  角色是否提供足够的特权隔离

  设计是否使用代码访问安全性

  应用程序使用哪些身份

  5.配置管理

  是否支持远程管理

  是否保存配置存储的安全

  是否隔离管理员特权

  6.敏感数据

  是否存储机密信息

  是否在网络中传递敏感数据

  是否记录敏感数据

  7.会话管理

  如何交换会话标识符

  是否限制会话生存期

  如何确保会话状态存储的安全

  8.加密

  是否开发自己的加密技术

  是否使用合适的密钥大小来应用正确的算法

  如何确保加密密钥的安全性

  9.异常处理

  是否使用结构化的异常处理

  是否向客户端公开太多的信息

  10.审核和日志记录

  是否明确了要审核的关键活动

  是否考虑过如何流动原始调用者身份

  二.应用及传输安全

  1.注册与登录

  2.在线超时

  3.操作留痕

  4.备份与恢复

  5.HTTPS和SSL测试

  6.服务器端的脚本漏洞检验

  7.防火墙测试

 

 

WEB安全性测试

  

一个完整的WEB安全性测试可以从部署与基础结构、输入验证、身份验证、授权、配置管理、敏感数据、会话管理、加密。参数操作、异常管理、审核和日志记录等几个方面入手。
  


1.安全体系测试


1)       部署与基础结构


u       网络是否提供了安全的通信


u       部署拓扑结构是否包括内部的防火墙  


u       部署拓扑结构中是否包括远程应用程序服务器


u       基础结构安全性需求的限制是什么


u       目标环境支持怎样的信任级别



2)       输入验证


u       如何验证输入  


u       是否清楚入口点

u       是否清楚信任边界
u       是否验证Web页输入
u       是否对传递到组件或Web服务的参数进行验证
u       是否验证从数据库中检索的数据
u       是否将方法集中起来
u       是否依赖客户端的验证  

u       应用程序是否易受SQL注入攻击 


u       应用程序是否易受XSS攻击


u       如何处理输入




3)身份验证

u       是否区分公共访问和受限访问
u       是否明确服务帐户要求
u       如何验证调用者身份
u       如何验证数据库的身份
u       是否强制试用帐户管理措施

4)授权
u       如何向最终用户授权
u       如何在数据库中授权应用程序
u       如何将访问限定于系统级资源

5)配置管理
u       是否支持远程管理
u       是否保证配置存储的安全
u       是否隔离管理员特权

  

6)敏感数据

u       是否存储机密信息
u       如何存储敏感数据
u       是否在网络中传递敏感数据
u       是否记录敏感数据

  

7)会话管理

u       如何交换会话标识符
u       是否限制会话生存期
u       如何确保会话存储状态的安全

  

8)加密

u       为何使用特定的算法
u       如何确保加密密钥的安全性

  

9)参数操作

u       是否验证所有的输入参数
u       是否在参数过程中传递敏感数据
u       是否为了安全问题而使用HTTP头数据

  

10)异常管理

u       是否使用结构化的异常处理
u       是否向客户端公开了太多的信息

  

11)审核和日志记录

u       是否明确了要审核的活动
u       是否考虑如何流动原始调用这身份

  

2.应用及传输安全

WEB应用系统的安全性从使用角度可以分为应用级的安全与传输级的安全,安全性测试也可以从这两方面入手。
应用级的安全测试的主要目的是查找Web系统自身程序设计中存在的安全隐患,主要测试区域如下。

  

1.       注册与登陆:现在的Web应用系统基本采用先注册,后登录的方式。


u       必须测试有效和无效的用户名和密码


u       要注意是否存在大小写敏感


u       可以尝试多少次的限制


u       是否可以不登录而直接浏览某个页面等。



  

2.       在线超时:Web应用系统是否有超时的限制,也就是说,用户登陆一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。




3.       操作留痕:为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进入了日志文件,是否可追踪。




4.       备份与恢复:为了防范系统的意外崩溃造成的数据丢失,备份与恢复手段是一个Web系统的必备功能。备份与恢复根据Web系统对安全性的要求可以采用多种手段,如数据库增量备份、数据库完全备份、系统完全备份等。出于更高的安全性要求,某些实时系统经常会采用双机热备或多级热备。除了对于这些备份与恢复方式进行验证测试以外,还要评估这种备份与恢复方式是否满足Web系统的安全性需求。传输级的安全测试是考虑到Web系统的传输的特殊性,重点测试数据经客户端传送到服务器端可能存在的安全漏洞,以及服务器防范非法访问的能力。一般测试项目包括以下几个方面。




5.       HTTPS和SSL测试:默认的情况下,安全HTTP(Soure HTTP)通过安全套接字SSL(Source Socket Layer)协议在端口443上使用普通的HTTP。HTTPS使用的公共密钥的加密长度决定的HTTPS的安全级别,但从某种意义上来说,安全性的保证是以损失性能为代价的。除了还要测试加密是否正确,检查信息的完整性和确认HTTPS的安全级别外,还要注意在此安全级别下,其性能是否达到要求。




6.       服务器端的脚本漏洞检查:存在于服务器端的脚本常常构成安全漏洞,这些漏洞又往往被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。




7.       防火墙测试:防火墙是一种主要用于防护非法访问的路由器,在Web系统中是很常用的一种安全系统。防火墙测试是一个很大很专业的课题。这里所涉及的只是对防火墙功能、设置进行测试,以判断本Web系统的安全需求。

 
 

 1. 不登录系统,直接输入登录后的页面的url是否可以访问

  2. 不登录系统,直接输入下载文件的url是否可以下载,如输入http://url/download?name=file是否可以下载文件file

 

  3. 退出登录后按后退按钮能否访问之前的页面

 

  4. ID/密码验证方式中能否使用简单密码。如密码标准为6位以上,字母和数字混合,不能包含ID,连续的字母或数字不能超过n位

 

  5. 重要信息(如密码,身份证号码,信用卡号等)在输入或查询时是否用明文显示;在浏览器地址栏里输入命令javascrīpt:alert(doucument.cookie)时是否有重要信息;在html源码中能否看到重要信息

  6. 手动更改URL中的参数值能否访问没有权限访问的页面。如普通用户对应的url中的参数为l=e,高级用户对应的url中的参数为l=s,以普通用户的身份登录系统后将url中的参数e改为s来访问本没有权限访问的页面

 

  7. url里不可修改的参数是否可以被修改

 

  8. 上传与服务器端语言(jsp、asp、php)一样扩展名的文件或exe等可执行文件后,确认在服务器端是否可直接运行

  9. 注册用户时是否可以以'--,' or 1=1 --等做为用户名

 

  10. 传送给服务器的参数(如查询关键字、url中的参数等)中包含特殊字符(','and 1=1 --,' and 1=0 --,'or 1=0 --)时是否可以正常处理

 

  11. 执行新增操作时,在所有的输入框中输入脚本标签(<scrīpt>alert("")</scrīpt>)后能否保存

 

  12. 在url中输入下面的地址是否可以下载:http://url/download.jsp?file=C:\windows\system32\drivers\etc\hosts,http://url/download.jsp?file=/etc/passwd

 

  13. 是否对session的有效期进行处理

 

  14. 错误信息中是否含有sql语句、sql错误信息以及web服务器的绝对路径等

 

  15. ID/密码验证方式中,同一个账号在不同的机器上不能同时登录

 

  16. ID/密码验证方式中,连续数次输入错误密码后该账户是否被锁定

 

  17. 新增或修改重要信息(密码、身份证号码、信用卡号等)时是否有自动完成功能(在form标签中使用autocomplete=off来关闭自动完成功能)

posted @ 2014-05-11 22:44  Agoly  阅读(1826)  评论(0编辑  收藏  举报