一、安全測試6項基本原則:
認證:對認證的使用者的請求回傳
存取控制:對未認證的使用者的權限控制與資料保護
完整性:使用者必須準確的收到伺服器傳送的訊息
機密性:訊息必須準確的傳遞給預期的使用者
可靠性:失敗的頻率是多少?網路從失敗中恢復需要多長時間?採取什麼措施來應對災難性的失敗? (個人理解這個地方應該更偏向於容錯容災測試的範疇)
不可抵賴:使用者應該能證明接收到的資料來自特定的伺服器
二、常見的安全測試內容
權限控制
SQL注入
URL安全性測試
#XSS(跨站腳本攻擊)
CSRF(跨站請求偽造)
URL跳轉漏洞
其他安全性方面的考量
三、Web應用程式中是什麼導致安全性問題呢?一般有以下幾個原因:
1、複雜應用系統程式碼量大、開發人員多、難免疏忽。
2、系統屢次升級、人員頻繁變更,導致程式碼不一致。
3、歷史遺留系統、試運行系統等多個Web系統共同運作於同一台伺服器上。
4、開發人員未經過安全編碼訓練或公司根本就沒有統一的安全編碼規格。
5、測試人員經驗不足或沒經過專業的安全評估測試就發佈上線。
6、沒有對使用者的輸入進行驗證,舉幾個例子:
1)永遠不要信任使用者的輸入,要對使用者的輸入進行校驗
# 2)數字型的輸入必須是合法的數字
3)字元型的輸入中對編碼符號要進行特殊處理
4)驗證所有的輸入點,包括Get,Post, Cookie以及其他HTTP頭
四、安全性測試的常見漏洞及解決方法:
#1、XSS跨站腳本攻擊
SS與SQL注入相似,XSS是透過網頁插入惡意腳本,主要用到的技術也是前端的HTML和JavaScript腳本。當使用者瀏覽網頁時,實現控制使用者瀏覽器行為的攻擊方式。
一次成功的XSS,可以取得到使用者的cookie,利用該cookie竊取使用者對該網站的操作權限;也可以取得到使用者聯絡人列表,利用被攻擊者的身分向特定的目標群組發送大量的垃圾訊息,等等。
XSS分為三類:儲存型(持久性XSS)、反射型(非持久性XSS)、DOM型。
測試方法:
在資料輸入介面,輸入:<script>alert(/123/)</script>,保存成功後如果彈出對話框,表明此處存在一個XSS 漏洞。
或把url請求中參數改為<script>alert(/123/)</script>,如果頁面彈出對話框,表示此處存在XSS 漏洞。
2、SQL注入
SQL注入是透過把SQL指令插入到Web表單遞交或輸入網域或頁面請求的查詢字元
字串,最後達到欺騙伺服器執行惡意的SQL命令。
SQL注入可能造成的危害有:網頁、資料被竄改,核心資料被竊取,資料庫所在的伺服器被攻擊,變成傀儡主機。
例如有些網站沒有使用預編譯sql,使用者在介面上輸入的一些欄位被加入到sql中,很有可能這些欄位包含一些惡意的sql指令。如:password = "1' OR '1'='1";即使不知道使用者密碼,也能正常登入。
測試方法:
在需要查詢的頁面,輸入正確查詢條件and 1=1等簡單sql語句,查看應答結果,如與輸入正確查詢條件返回結果一致,表明應用程式對使用者輸入未進行過濾,可以初步判斷此處存在SQL注入漏洞
修改建議:
對使用者的輸入進行校驗,可以透過正規表示式,或限制長度;對以下關鍵字進行轉換等;
||alert|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|declare|sitename|netuser |xp_cmdshell|or| |,|like'|and|exec|execute|insert|create|drop|table|from|grant|group_concat|column_name|information_schema.columns|table_schema|union|wherordere|select|delete|update| |by|count|chr|mid|master|truncate|declare|or|--| |,|like|//
不要使用動態拼裝sql,可以使用參數化的sql或直接使用預存程序進行資料查詢訪問;
不要使用管理員權限的資料庫連接,為每個應用程式使用單獨的權限有限的資料庫連接;
應用程式的異常資訊應該給出盡可能少的提示,最好使用自訂的錯誤訊息對原始錯誤訊息進行包裝。
3、URL跳轉漏洞
URL跳轉漏洞,即未經驗證的重定向漏洞,是指Web程式直接跳到參數中的URL,或是在頁面中引入了任意開發者的URL,將程式引導到不安全的第三方區域,從而導致安全問題。
測試方法:
1.使用抓包工具抓取請求。
2.抓取302的url,修改目標位址,查看是否能跳躍。
ps:不過現在很多跳躍都加了referer的校驗導致攻擊者跳轉失敗。
4、檔案上傳漏洞
檔案上傳攻擊是指攻擊者上傳了一個執行檔到伺服器上,並執行。
這種攻擊方式是最直接有效的。上傳的檔案可以是病毒、木馬、惡意腳本或是webshell等等。
Webshell是以asp、php、jsp或cgi等網頁檔案形式存在的一種指令執行環境,也可以說是一種網頁後門。攻擊者在受影響系統防止或插入webshell後,可以透過webshell方便進入系統,達到控制網站伺服器的目的。
測試方法:
對上傳的檔案類型、大小等進行嚴格校驗,禁止上傳惡意程式碼的檔案。
對相關目錄的執行權限進行校驗,可以透過瀏覽器存取Web 伺服器上的所有目錄,檢查是否傳回目錄結構,如果顯示的是目錄結構,則可能有安全性問題。
5、CSRF跨站偽造請求攻擊
CSRF,利用已登入的使用者身份,以使用者的名義發送惡意請求,完成非法操作。
例如:使用者如果瀏覽並信任了存在CSRF漏洞的網站A,瀏覽器產生了相應的cookie,使用者在沒有退出網站的情況下,造訪了危險網站B 。
危險網站B要求存取網站A,發出一個請求。瀏覽器帶著使用者的cookie資訊造訪了網站A,因為網站A不知道是使用者本身發出的請求還是危險網站B發出的請求,所以就會處理危險網站B的請求,這樣就完成了模擬使用者操作的目的。這就是CSRF攻擊的基本想法。
測試方法:
1. 同個瀏覽器開啟兩個頁面,一個頁面權限失效後,另一個頁面是否可操作成功,如果仍然能操作成功即存在風險。
2.使用工具發送請求,在http請求頭中不加入referer字段,檢驗返回訊息的應答,應該重新定位到錯誤介面或登入介面。
以上是常見的Web安全漏洞及測試方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!