一、XSS漏洞
XSS是跨站腳本攻擊(Cross Site Scripting)的縮寫,分為存儲型,反射型漏洞兩種
1.存儲型xss漏洞(風險等級:高)
漏洞危害
存儲XSS把用戶輸入的數據存儲到數據庫,顯示到前端頁面。攻擊者可進行身份驗證盜取和蠕蟲攻擊。存儲型XSS也叫做“持久型XSS”
漏洞驗證
2.反射型XSS漏洞(風險等級:中)
漏洞危害
反射型XSS把用戶輸入的數據“反射”給瀏覽器。攻擊者往往需要誘使用戶“點擊”一個惡意鏈接,才能攻擊成功,反射型XSS也叫做“非持久型XSS”
漏洞驗證
修復辦法
1、使用HttpOnly有助於緩解XSS攻擊,但是在部署時需要注意,如果業務復雜,則需要在所有Set-Cookie的地方,給關鍵Cookie都加上HttpOnly。漏掉了一個地方,都可能使得這個方案失效
2、在服務器端對輸入進行格式檢查,如在網站注冊時填寫的用戶名只能為字母、數字的組合,手機號應該是不長於16位的數字;檢查輸入中是否包含一些特殊字符,如<、>、'、"、/等,如果發現,則進行過濾或編碼;對輸入進行XSS特征的匹配,如查找數據中是否包含“script”、“javascript”、“prompt”、“confirm”等敏感字符
3、一般來說,除了富文本的輸出外,在變量輸出到HTML頁面時,可以使用編碼或轉義的方式來防御XSS攻擊。針對HTML代碼的編碼方式是HtmlEncode,在PHP中,有htmlentities()和htmlspecialchars()兩個函數可以滿足安全要求。相應的,JavaScript的編碼方式可以使用JavascriptEncode,JavascriptEncode與HtmlEncode的編碼方式不同,它需要使用“\”對特殊字符進行轉義。在對抗XSS時,還要求輸出的變量必須在引號內部,以避免造成安全問題;除了HtmlEncode、JavascriptEncode外,還有很多用於各種情況的編碼函數,比如XMLEncode、JSONEncode等
二、SQL注入漏洞(風險等級:高)
漏洞危害
SQL注入被廣泛用於非法入侵網站服務器,獲取網站控制權。它是應用層上的一種安全漏洞。通常在設計存在缺陷的程序中,對用戶輸入的數據沒有做好過濾,導致惡意用戶可以構造一些SQL語句讓服務器去執行,從而導致數據庫中的數據被竊取、篡改或刪除甚至最終導致服務器被入侵等危害
漏洞驗證
正常用戶輸入“admin”,密碼為“password”
最終執行的SQL語句為:
select count(*) from admin where username = ' admin ' and password = ' password '
輸入特殊用戶" 'or 1=1-- "
最終執行SQL語句為:
select count(*) from admin where username = ''or 1=1--' and password = ''
修復辦法
對所有輸入/輸出的參數在進入數據庫調用之前,進行嚴格過濾和檢測,要解決SQL注入漏洞,建議采取以下方式:
1、傳入的參數明確類型,如果參數是數字,應檢查參數輸入的內容是否是數字,如果檢查到其它類型,則應進行錯誤處理,避免進入數據庫調用
2、對傳入的參數中含有特殊字符,應進行轉義處理,比如單引號;對數據庫關鍵字如“select”、“update”、“insert”、“and”等進行過濾處理,同時應該具備嚴格匹配策略,防止攻擊者通過大小寫、編碼等方式繞過限制
3、對傳入的參數的檢測,都應該在服務器端進行
4、進行異常處理,避免出錯時暴露敏感信息
5、合理配置數據庫連接用戶的權限,應實現權限最小化原則
6、建議使用參數化查詢或預編譯的方式進行數據庫查詢
三、CSRF跨站請求偽造漏洞(風險等級:高)
漏洞危害
攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站發送跨站請求。利用受害者在被攻擊網站已經獲取的注冊憑證,繞過后台的用戶驗證,達到冒充用戶對被攻擊的網站執行某項操作的目的
漏洞驗證
一個典型的CSRF攻擊有着如下的流程:
*受害者登錄a.com,並保留了登錄憑證(Cookie)
*攻擊者引誘受害者訪問了b.com
*b.com 向 a.com 發送了一個請求:a.com/act=xx。瀏覽器會默認攜帶a.com的Cookie
*a.com接收到請求后,對請求進行驗證,並確認是受害者的憑證,誤以為是受害者自己發送的請求
*a.com以受害者的名義執行了act=xx
*攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者,讓a.com執行了自己定義的操作 |
修復辦法
CSRF漏洞防御主要可以從三個層面進行,即服務端的防御、用戶端的防御和安全設備的防御
1.給每個HTTP請求添加一個不可預測的令牌,並保證該令牌對每個用戶會話來說是唯一性。最好的辦法是將獨有的令牌包含在隱藏字段中,通過HTTP請求發送,避免在URL中暴露出來
2.設定短暫的可信用戶會話時間