安全测试主要是针对web方面的安全测试.而web安全其实就是各种各样的漏洞,主要包括三个方面:漏洞原理,测试手段和如何防范.
安全的常用工具,appscan和webinspect.但是在做安全的时候不建议用审计工具,因为有些扫出来本不是漏洞的漏洞,另外也对本身的技术没有提高.当扫出来问题后还是需要去一一鉴别,而这个鉴别的过程并没有比自己做安全轻松.在安全中注重的是发现漏洞,测试漏洞等.
其实,测试中的三部分:性能,自动化和安全之间的区别是:性能和安全针对请求,而自动化针对操作.性能和安全更针对于一些极限环境(性能:极限的压力比如并发,持久性.安全:极限的操作,非正式的操作).安全的极限主要是输入内容,入参的极限.
那么提到了安全就想起来了一个词:黑客.最早的时候黑客其实是一个中性词,是指计算机技术才华出众的人,比如乔布斯啊,比尔盖茨啊.到如今,我们把黑客分成了三种:白帽子,黑帽子和灰帽子.
黑帽子: 1.发现漏洞,自己攻击获得利益 2.勒索的形式
白帽子: 不在获利,与黑帽子对抗,进行抵御.目的在于防御.
灰帽子: 不想通过漏洞攻击,但是又想获利.
最早的时候网络层的安全是比较火爆的,逐步到了2014年左右,发现出现的安全问题不出现在网络层了,因为网络层的安全我们可以依赖防火墙等一些花钱就能解决的东西,所以到目前为止,更多的公司关注于web,而其实做web安全就是基于http请求的安全.
http核心方法
get: 参数在url上 向已有资源发出请求获取资源 举例:王菲明天请我吃饭
post: 看不到参数 向指定的url发出指定带有数据的请求 举例:王菲明天请我吃饭,name吃饭的时间,地点,包间就是参数
post请求不会实现CSRF和XSS漏洞
主要区别之一:数据是否成为了资源的一部分
put请求其实是有两个含义:1,直接到某一个指定资源来直接上传一个内容2.put和post基本上是一致的,put约等于post.但是其实put和post还是有本质上的区别的.
put请求是直接放过去,不含有任何密等情形的.而post请求可能是对数据进行部分修改或对一个已经发生的事情进行再去发出一个请求.实际上经常用户硬件.
由于不存在密等性,所以我们弃用put.比如上传一个文件,put是直接以覆盖的形式放文件,而post是把文件转化成流放到服务器.
trace请求主要用在服务器的回响回传,尤其用在硬件.如果在项目抓包的过程中发现了trace请求,可以直接判断为安全问题. 当发现delete请求时也是为安全问题,因为delete是不经过任何判断就删除资源,所以属于安全问题.一定要经过后端处理后或者是做逻辑删除等.
get和post的区别:
1.从底层http请求 get从底层返回到上层调用
post从上层拿到资源再去下层传入数据
2.安全性 post不会被xss等攻击
那么在安全测试时,不光关注与输入,还要关注返回.下面是一些常见的状态码
2开头的都表示请求被接受
200表示请求被接受并且做了返回.
202已接收但是没有处理完成 比如王菲请我吃饭,我说好你请我吃饭,但是很多人请我吃饭,明天晚上不行得以后了.表示这件事我接收了,但是还没有处理.用于队列或者异步处理.
206已经接收并部分处理. 比如:王菲说请我吃饭,那是做梦.但是我只听到了说请我吃饭,并没有听见后半句话.先实际中经常用于分块下载.
3开头的请求都是基于跳转
301永久移动.请求的资源已经永久移动到新的url中
302临时移动.
举个例子,301代表着搬家永久移动.我出去旅游,但是但是我买东西还是要邮到我家里的地址,最终我还要回去的,就是302临时移动.
4开头和5开头的请求都是报错,但两者之间从安全的角度或者说从http请求的角度来说并不一样.
4开头是说客户端发出了一个请求而服务器开始处理,只不过进行处理的时候发生了某些错误.表示请求本身就错了.
400 表示客户端请求的语法,服务器听不懂.
404 语法没问题,请求的资源不存在,比如访问了一个不存在的页面或资源不存在.压根就不存在.
401 没有身份验证.当你用svn时,当svn没登录时直接访问资源的url时会弹出一个登录框,这个时候返回的就是类似401的请求
403有身份验证,但是拒绝执行.请求存在,但权限不足.你登录完了,但是这个url管理员没给你权限,给返回403,表示请求没问题资源存在但是服务器不能给你返回,因为你没有权限,权限不足.
5开头的是指客户端发了来一个请求过来从服务器端来说就错了,没有到服务器底层没有开始就错了.表示服务器错了.
500 是指服务器端没有办法处理,服务器端的异常.
502 网关服务器问题,从网关处有问题
以上所有的状态码是不能通过中间件进行修改的.
网络协议
ip经常用户后端的请求处理上.如果ip是一个大房子的话,而端口就相当于一个房子里面的不同的房间.端口号只有整数,65535这个值是2进制16次方减1,是二进制的最大一个数.
在安全测试中分为:先验(基于安全原理),后验(漏洞发生了该怎么办)
web应用
web架构
从客户端发起请求到web服务器,web服务器发起到应用服务器,应用服务器请求DB,DB返回数据的值给应用服务器,应用服务器返回到web服务器也就是浏览器,web服务器返回给客户端,客户在客户端进行浏览.而我们的web安全测试处理最多的是在客户端到web服务器,包括我们抓包的时候都是从客户端到web服务器的过程中.
在同种显示,我们会把很大比重的成本放在网络安全上,因为网络安全是我们能想象到的后果比较严重的,比如攻击服务区会导致服务器down掉了,所以我们会投入一起成本进行人力的防护,防火墙的购买等措施.但实际上来说,真正在互联网体系中,攻击发生的比例75%是发生在web应用上,只有25%实在网络攻击上.就我们目前来说web应用投入的比例相对较低,所以也是比较脆弱的地方.
什么是web安全测试
安全测试是依据与策略而执行的,更多的依赖于经验,安全测试并不能避免所有的安全漏洞,就像功能测试并不能保证说测完了就绝对没有功能性bug.
说到安全测试,可能大家觉得离我们比较遥远,那么说一些日常生活中常见的一些采用安全策略的手段.
1.什么我们登录的时候要输入验证码?
为了防止暴力破解.也就是说我玩命的试就行了,而加上验证码,验证码随机,验证码越来越复杂,就可以防止机器进行暴力破解.
2.在一个网站上长时间没有操作,为什么会session失效?
安全分为先验和后验.以上两种都属于后验.如果别人拿到了我的session拿到了我的cookies,但是这个时候我的会话令牌已经失效了不能冒充我了,所以比较安全.
3.问什么很多网站不支持"一号多登",会有顶下来的情况?
属于后验的提醒,你发现了可以去改代码之类的
4.为什么支付宝等接口都是https
因为https相对来讲安全.在抓包的时候https抓包需要证书.另外一点,https在传输层的加密做的比较好,在传输过程中不会丢包,就算丢包了也解析不了,保证了传输的安全
5.为什么银行转账都是两步确认.
这种两步确认在我们安全中叫做"双因子确认"更大程度保证账户安全.
待续.........