安全性测试主要是指利用安全性测试技术,在产品没有正式发布前找到潜在漏洞。找到漏洞后,需要把这些漏洞进行修复,避免这些潜在的漏洞被非法用户发现并利用。像我们测试中找软件产品bug一样,安全漏洞也是很难完全避免的。黑客攻击技术会层出不穷,而无论怎么样,我们所做的web网站一定是需要对用户提供一些服务,会开放一些端口,甚至给用户提供一些输入的界面,而这些方面都有可能成为漏洞的载体。还有一个主要原因是因为程序员在开发过程中很可能会埋下一个漏洞,或者人为的安全性漏洞,都是需要我们去避免的。
对于web系统来说,它是一个标准的网络结构的系统,所以跟协议有关的漏洞我们需要去避免,其次它是通过浏览器为载体的,浏览器层面的漏洞我们需要去注意。一般是使用网页与用户进行交互,而网页有很多操作可以通过JavaScript来进行的,我们很有可能直接绕开这个界面,直接给服务器发数据包。比如:目前商城测试中某文本框,只能输入不大于20字,那么javascript在文本框的输入数据字数进行限制,但是在服务器没有进行限制,我们直接发多于20字的文本到服务端,服务端可以照单全收,这也是个问题。
具体来说,安全性测试主要包括以下几个部分内容:
- 认证与授权
- Session与Cookie
- DDOS拒绝服务攻击
- 文件上传漏洞
- XSS跨站攻击
- SQL注入
认证与授权
尽量避免未被授权的页面可以直接访问,应该对每个页面都有一个session变量的判断。如果没有判断只要用户知道URL地址就能进行访问。
测试方法:
在不登陆的情况下,使用绝对URL地址对页面进行访问,能否正常访问,绝对URL地址直接通过httpwatch对每个请求进行获取。
Session与Cookie
Http是一种无状态性的协议,这种协议不要求浏览器在每次请求中标明他自己的身份,每次发个请求回个响应即可,那怎么校验发请求的人的身份呢?这就催生了Cookies。
本质上Cookies就是http的一个扩展,有两个http头部是专门负责设置和发送cookies的(Set-Cookies,Cookies)当服务器返回给客户端一个http相应的时候,其中如果包含Set-Cookies这个头部,就意味着让客户端建立cookie,并且在后续的请求中自动发送这个cookies到服务器,一直到这个cookie过期。
Session,最简单的针对session的攻击就是跨站请求伪造。
关键点是如何不让攻击者获取到sessionid,然后伪装成正常访问者,但是从理论上来说这是不能绝对实现的,我们只能通过不同的手法增加攻击者获取sessionid的难度,有三种方法:
- 验证请求头中的数据,比如验证User-Agent的变化;
- 增加token校验;
- 利用get.post.cookie等不同的传输方式来传递sessionid和token等增加攻击者获取难度。
我们应避免保存敏感信息到cookie文件中,cookie的保存可以提高用户的体验。
作用域:不同应用系统不同作用域。
DDOS拒绝服务攻击
分布式的拒绝服务式攻击(攻击服务器的电脑分布在不同地方,向服务器发送请求)的两种方式:
1)使用肉机
通过设置木马让很多电脑受远程控制,帮忙执行病毒程序,服务器防火墙无法通过封锁IP的方式进行处理,唯一的解决办法就是服务器够强大。
2)形成攻击联盟
很多人联合起来对同一个网站发起攻击,对网站流量形成一定压力,对同一网站造成伤害。
常规的防御方法:
1)确保服务器的系统文件是最新的版本,并及时更新系统补丁;
2)关闭不必要的服务;
3)限制同时打开的SYN半连接数目,缩短SYN半连接的time out 时间,限制SYN/ICMP流量;
4)正确设置防火墙;
5)认真检查网络设备和主机/服务器系统的日志,只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击;
6)限制在防火墙外与网络文件共享,这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会;
7)充分利用网络设备保护网络资源;
8)用足够的机器承受黑客攻击;
9)检查访问者的来源。
文件上传漏洞
文件上传漏洞,可以利用WEB上传一些特定的文件。一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。
文件上传漏洞产生原因主要是缺少必要的校验。关于上传测试点:
1. 上传文件是否有格式限制,是否可以上传exe文件。
2. 上传文件是否有大小限制,上传太大的文件是否导致异常错误,上传0K的文件是否会导致异常错误,上传并不存在的文件是否会导致异常错误。
3. 通过修改扩展名的方式是否可以绕过格式限制,是否可以通过压包方式绕过格式限制。
4. 是否有上传空间的限制,是否可以超过空间所限制的大小,如将超过空间的大文件拆分上传是否会出现异常错误。
5. 上传文件大小大于本地剩余空间大小,是否会出现异常错误。
6. 关于上传是否成功的判断。上传过程中,中断,程序是否判断上传是否成功。
7. 对于文件名中带有中文字符,特殊字符等的文件上传。
8. 上传漏洞拿shell。
9. 直接上传asp.asa.jsp.cer.php.aspx.htr.cdx….之类的,拿到shell。
10.在上传时在后缀后面加空格或者加几点,例:*.asp ,*.asp..。
11.利用双重扩展名上传例如:*.jpg.asa格式(也可以配上第二点一起利用)。
12.gif文件头欺骗。
13.同名重复上传。
XSS跨站攻击
跨站脚本攻击(Cross Site Script,简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。比如:某个页面上有个广告,网址是xxxx.taobao.com,你点击进去,发现是淘宝的购物网站,然后进行购买,其实他会重定向到另一个攻击者自己的网站,在购买的时候,使用的是攻击者的接口进行付款,很可能就会被盗取个人信息及财产等。
对于跨站漏洞,我们主要看代码里对用户输入的地方和变量有没有做长度和对”<”,”>”,”;”,”’”等字符是否做过滤,还有要注意的是对于标签的闭合等,完善的输入检查是预防XSS的重要措施。
SQL注入
SQL注入是一种安全漏洞。攻击者之所以可以利用自己输入的数据来达到攻击网站的目的,原因就在于SQL语言作为一种解释型语言,它的数据其实是由程序员编写的代码和用户提交的数据共同组成的。正是这个原因,攻击者可以构造对自己有利的数据,利用网站的一些SQL漏洞来达到恶意的目的。
SQL注入,就是指攻击者将恶意的字符串或者语句等信息作为参数输入,服务器在验证这个字段的时候,读取攻击者输入的数据,将其作为正常的值参与SQL语句的查询,如果攻击者输入了一个字符串,在SQL语句执行之后,可以导致删除表等操作,对于一个应用来说,影响是很大的。
SQL注入一般会出现的地方:
- 含有输入数据表单的页面(登录界面、查询界面、反馈界面等),即使是hidden的表单也有可能存在这个问题。
- 含有用户信息、ID等的URL,可以操作ID后的参数数据。
SQL注入的方法措施:
从测试人员角度来说,在需求阶段时,我们就应该有意识的将安全性检查应用到需求测试。例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:需求中应说明表单中某一field的类型、长度以及取值范围(主要作用就是禁止输入敏感字符)。需求中应说明如果超出表单规定的类型、长度以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示等。