常見Web安全漏洞及防範

分享三種常見的安全漏洞

輸入輸出驗證不充分

輸入輸出驗證

SQL注入

定義

SQL注入是SQL語句插入到傳入參數的攻擊,以後再將這些參數傳遞給SQL服務器加以解析並執行。php

成因

代碼中有拼接的SQL或HQL語句前端

危害
  • 拖庫:致使數據丟失、數據竊取、數據破壞或拒絕服務
  • 提權:徹底接管操做系統
防範

思路:預處理和參數化查詢數據庫

  • 預處理和參數化查詢PreparedStatement

使用相關的框架如Struts、Hibernate、Ibatis等後端

  • 執行嚴格的輸入驗證

使用正規表達式,嚴格檢查輸入的類型、長度和內容瀏覽器

跨站腳本攻擊(XSS)

定義

跨站腳本攻擊(XSS)一般是指攻擊者利用網站程序對傳入參數值過濾不足,輸入能夠顯示在頁面上對其餘用戶形成影響的HTML、JS惡意代碼。安全

成因
  • 傳入值驗證不嚴格、用戶可以控制傳入值
  • 未經處理直接輸出到客戶端網頁中
危害

劫持用戶會話、插入惡意內容、重定向用戶、使用惡意軟件劫持用戶瀏覽器等。服務器

防範

思路:數據在輸出時轉義編碼處理網絡

  • 輸出編碼(輸出至客戶端前進行編碼)

輸入驗證或過濾(客戶端及服務器端雙向驗證)框架

  • 嚴格輸入驗證:對用戶輸入的數據類型、大小、範圍的驗證,可避免輸入危害的字符和冗餘數據
  • 黑名單過濾

惡意文件上傳

定義

惡意文件上傳是指攻擊者經過修改上傳功能程序的參數內容,從而達到上傳惡意文件的目的jsp

成因

未對上傳文件類型和格式作合法性校驗,致使攻擊者能夠上傳WebShell惡意文件(.asp,.war,.php,.jsp等)

危害

能夠獲取Web服務器的控制權

防範

思路:上傳文件進行白名單過濾(只容許須要的)

  • 文件類型、大小檢查
  • 下載時直接文件名引用

上傳的文件以二進制形式下載,不提供直接訪問

  • 上傳目錄禁止執行及獨立保存位置

指定上傳文件目錄(此路徑應該在Web服務器限制爲只讀,禁止執行),文件存儲到獨立的文件服務器或數據庫中。

  • 隨機改寫文件名和文件路徑,使不可猜想

邏輯設計缺陷

邏輯設計缺陷

業務邏輯漏洞

定義

業務邏輯漏洞是因爲業務邏輯設計或流程設計不完整、不合理致使的業務相關的缺陷。

成因

業務邏輯漏洞是因爲業務邏輯設計或流程設計不完整、不合理,客戶端能夠控制輸入數據和流程、檢查點

危害
  • 信息泄露、越權訪問、帳號竊取等
  • 通常是全局問題,可能比常規的安全漏洞更加嚴重
實例
  1. 資源耗盡

短信、郵件等若是沒有限制發送次數就會產生拒絕服務攻擊

  1. 註冊送優惠券

手機用戶註冊可送優惠券,未限制每一個手機次數

  1. 任意重置密碼

密碼找回的憑證太弱,如只需填入一個四位或者六位的純數字就能夠重置密碼,致使能夠暴力破解;

用戶找回密碼的郵箱或者手機號碼被修改

  1. 繞過驗證碼

12306輸入完驗證碼提交訂單時必需要等待4.8秒,可繞過驗證碼

  1. 任意郵箱綁定

任意郵箱綁定帳號(結合CSRF),驗證碼連接直接登錄。

防範

思路:業務流程須要有必要的控制參數,同時避免控制參數被繞過。

  • 防止繞過流程節點和檢查參考(如token等)
  • 不須要用戶操做或訪問的數據避免發送到客戶端(如驗證碼發送給客戶端)
  • 驗證全部輸入(數字的邊界、正負值等)
  • 防範資源消耗攻擊(如短信等)、拒絕服務攻擊(大規模數據查詢,如搜索通配符)等

失效的身份認證

定義

身份認證功能存在設計缺陷或功能薄弱,這就致使攻擊者繞過認證,竊取密碼、密鑰、會話令牌或利用實施漏洞冒充其餘用戶身份

成因

身份認證方式薄弱,如弱密碼、無驗證碼等

邏輯設計缺陷致使能夠重置任意用戶密碼

危害

繞過認證或竊取用戶帳戶,特權帳戶會形成更大的破壞

防範

身份認證時第一道安全防線,身份認證須要防暴力破解、弱口令攻擊。密碼策略和驗證碼時互聯網系統認證標配。

  • 密碼策略

通常系統:8字符以上,且進行弱密碼檢查,並禁止包含用戶名

重要系統:使用多種驗證方式(如動態密碼、短信等)

  • 首次登錄修改初始密碼:首次登錄強制修改默認初始密碼
  • 防密碼暴力破解或猜解(或撞庫):使用驗證碼登錄(如三次密碼或帳號嘗試錯誤後出現)
  • 密碼重置:驗證舊密碼或手機驗證碼
  • 郵箱/手機綁定:綁定操做須要用戶確認(須要手工輸入驗證碼)

越權操做

定義

越權操做指對系統進行超越本身權限的操做;

橫向越權:非法獲取同類用戶權限

縱向越權:非法獲取管理員或特權用戶權限

成因

缺少對用戶權限的判斷,及隱藏URL失效

危害

越權可形成非受權用戶對全部數據、功能進行操做

防範

思路:用戶所有請求進行權限檢查

  • 驗證每次請求(URL、數據資源)的用戶權限
  • 參數隨機化(避免可預測)
  • 管理後臺增強認證和訪問控制(如IP地址限制)

環境漏洞

環境漏洞.png
)]

第三方代碼或組件

在使用第三方產品前,須要進行安全評估和版本篩選,從可信的網站(如官網下載),刪除沒必要要的功能,並及時跟蹤安全補丁。

API接口安全

接口安全認證

應對接口訪問進行認證(服務器端分配API KEY),如使用Token/openid防範非法訪問;IP白名單限制。

接口數據有效性檢查

應對接口數據有效性進行檢查,防範重放攻擊和代碼注入攻擊。

接口數據加密傳輸

應使用數據加密、數字簽名等方式保證數據保密性和完整性

接口訪問權限及記錄

應對接口的訪問權限、訪問頻次進行控制,並記錄接口訪問的日誌。

安全開發原則

永不信任用戶輸入

  1. 對用戶輸入的有效性檢查
  2. 前端+後端雙向驗證
  3. 避免執行用戶輸入數據

最小攻擊頁面

  1. 最小權限
  2. 功能最小化(只實現須要功能)
  3. 輸出最小化

縱深防護

  1. Web應用安全
  2. 操做安全
  3. 中間件安全
  4. 數據庫安全
  5. 網絡安全
  6. 客戶端、移動APP安全
相關文章
相關標籤/搜索