[雜談] 常見安全漏洞及修復方案

原文地址:支付寶開放平臺第三方應用安全開發指南,如有侵權請聯繫刪除

1. 跨站腳本(XSS)漏洞

  • 漏洞描述

    跨站腳本攻擊(Cross Site Scripting, XSS)發生在客戶端,可被用於進行竊取隱私、釣魚欺騙、偷取密碼、傳播惡意代碼等攻擊行爲。
    惡意的攻擊者將對客戶端有危害的代碼放到服務器上作爲一個網頁內容, 使得其他網站用戶在觀看此網頁時,這些代碼注入到了用戶的瀏覽器中執行,使用戶受到攻擊。一般而言,利用跨站腳本攻擊,攻擊者可竊會話 Cookie 從而竊取網站用戶的隱私。

  • 漏洞危害

    釣魚欺騙:最典型的就是利用目標網站的反射型跨站腳本漏洞將目標網站重定向到釣魚網站,或者注入釣魚 JavaScript 以監控目標網站的表單輸入。
    網站掛馬:跨站時利用 IFrame 嵌入隱藏的惡意網站或者將被攻擊者定向到惡意網站上,或者彈出惡意網站窗口等方式都可以進行掛馬攻擊。
    身份盜用:Cookie 是用戶對於特定網站的身份驗證標誌,XSS 可以盜取到用戶的 Cookie,從而利用該 Cookie 盜取用戶對該網站的操作權限。如果一個網站管理員用戶 Cookie 被竊取,將會對網站引發巨大的危害。
    盜取網站用戶信息:當能夠竊取到用戶 Cookie 從而獲取到用戶身份時,攻擊者可以獲取到用戶對網站的操作權限,從而查看用戶隱私信息。
    垃圾信息發送:比如在 SNS 社區中,利用 XSS 漏洞借用被攻擊者的身份發送大量的垃圾信息給特定的目標羣。
    劫持用戶 Web 行爲:一些高級的 XSS 攻擊甚至可以劫持用戶的 Web 行爲,監視用戶的瀏覽歷史,發送與接收的數據等等。
    XSS 蠕蟲:XSS 蠕蟲可以用來打廣告、刷流量、掛馬、惡作劇、破壞網上數據、實施 DDoS 攻擊等。

  • 解決方案

    • 對參數做 html 轉義過濾,要過濾的字符包括:單引號、雙引號、大於號、小於號,& 符號,防止腳本執行。
    • 在變量輸出時進行 HTML ENCODE 處理。

2. CSRF 漏洞

  • 漏洞描述

    跨站請求僞造(Cross-Site Request Forgery, CSRF),惡意網站通過腳本向當前用戶瀏覽器打開的其它頁面的 URL 發起惡意請求,由於同一瀏覽器進程下 Cookie 可見性,導致用戶身份被盜用,完成惡意網站腳本中指定的操作。

  • 漏洞危害

    信息泄露:如登錄ID,隱私信息等。
    惡意操作:如加好友,加購物車,刪除數據等。

  • 解決方案

    CSRF漏洞修復方案主要思路有兩類:

    驗證請求是信任頁面發起,這類修復方案有:
    在表單中填充一次性隨機的 csrf token 防止攻擊者僞造 form 表單進行 CSRF。同時將此串 token 置入 session,在後端再進行一次一致性校驗。
    referer 驗證。
    驗證請求是合法用戶發起,這類修復方案有:
    驗證碼
    密碼驗證
    OTP 驗證

3. HTTP Header 注入漏洞

  • 漏洞描述

    Web 程序代碼中把用戶提交的參數未做過濾就直接輸出到 HTTP 響應頭中,導致攻擊者可以利用該漏洞來注入到 HTTP 響應頭中實現攻擊。

  • 解決方案

    對參數做合法性校驗以及長度限制,謹慎的根據用戶所傳入參數做 HTTP 響應的 Header 設置。
    在設置 HTTP 響應頭時,過濾回車換行 %0d%0a、%0D%0A 字符。

4. 目錄遍歷漏洞

  • 漏洞描述

    目錄遍歷是由於 Web 服務器或 Web 應用程序對用戶輸入文件名稱的安全性驗證不足而導致的一種安全漏洞,使得攻擊者通過 HTTP 請求和利用一些特殊字符就可以繞過服務器的安全限制,訪問任意受限的文件(可以是 Web 根目錄以外的文件),甚至執行系統命令。

  • 解決方案

    嚴格檢查文件路徑參數,限制在指定的範圍。
    嚴格限制文件路徑參數,不允許用戶控制文件路徑相關的參數,限定文件路徑範圍。

5. SQL 注入漏洞

  • 漏洞描述

    SQL 注入攻擊(SQL Injection),被廣泛用於非法獲取網站控制權,是發生在應用程序的數據庫層上的安全漏洞。 在設計不良的程序當中,忽略了對輸入字符串中夾帶的 SQL 指令的檢查,那麼這些夾帶進去的指令就會被數據庫誤認爲是正常的 SQL 指令而運行,從而使數據庫受到攻擊,可能導致數據被竊取、更改、刪除,以及進一步導致網站被嵌入惡意代碼、被植入後門程序等危害。

  • 漏洞危害

    機密數據被竊取
    核心業務數據被篡改
    網頁被篡改
    數據庫所在服務器被攻擊變爲傀儡主機,甚至企業網被入侵

  • 解決方案

    所有的查詢語句都使用數據庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入到 SQL 語句中。
    對進入數據庫的特殊字符 '"<>&*; 等進行轉義處理,或編碼轉換。
    確認每種數據的類型,比如數字型的數據就必須是數字,數據庫中的存儲字段必須對應爲 int 型。
    數據長度應該嚴格規定,能在一定程度上防止比較長的 SQL 注入語句無法正確執行。
    網站每個數據層的編碼統一,建議全部使用 UTF-8 編碼,上下層編碼不一致有可能導致一些過濾模型被繞過。
    嚴格限制網站所用數據庫賬號的權限,給此用戶僅提供能夠滿足其工作的權限,從而最大限度的減少注入攻擊對數據庫的危害。
    避免網站顯示 SQL 錯誤信息,比如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進行一些判斷。

6. 文件下載漏洞

  • 漏洞描述

    Web 應用程序在處理文件下載時,接受用戶指定的路徑和文件名進行下載,攻擊者利用此漏洞來下載服務器的其它文件甚至任意文件(源代碼、數據庫甚至 passwd 等)。

  • 解決方案

    限制可下載文件所在的目錄爲預期範圍。
    通過指定文件編號的方式來定位待下載文件。

7. 文件上傳漏洞

  • 漏洞描述

    文件上傳的 Web 程序未對文件類型和格式做合法性校驗,導致攻擊者可以上傳 Webshell 或者非期望格式的文件。

  • 解決方案

    對上傳文件的大小和類型進行校驗,定義上傳文件類型白名單。
    保存上傳文件的目錄不提供直接訪問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章