常見前端安全問題概述

隨着互聯網的高速發展,安全問題已成爲企業最關注的焦點之一。而前端又是容易引起安全問題的「窗口」,做爲開發人員的咱們,更須要充分了解如何預防和修復安全漏洞。本文將列舉常見的前端安全問題,但願對你有所幫助。前端

本文將從如下幾種安全問題展開介紹:git

  • XSS攻擊
  • CSRF攻擊
  • SQL注入
  • XXE漏洞
  • JSON劫持
  • XST攻擊
  • 暴力破解
  • 信息泄露
  • 其餘漏洞

1. XSS攻擊

XSS攻擊全稱跨站腳本攻擊(Cross-Site Scripting),爲區別CSS,在安全領域叫作XSS。攻擊者經過在目標網站上注入惡意腳本並運行,獲取用戶的敏感信息如 Cookie、SessionID等,影響網站與用戶數據安全。github

開始這種攻擊的案例是跨域的,因此叫作「跨站腳本」。可是發展到今天,因爲JS的強大以及網站前端應用的複雜化,是否跨域已經再也不重要。但因爲歷史緣由,XSS這個名字卻一直保留下來。web

本質是惡意代碼未通過濾,與網站正常的代碼混在一塊兒,瀏覽器沒法分辨哪些腳本是可信的,致使惡意腳本執行。shell

XSS攻擊要素數據庫

  1. 攻擊者提交惡意代碼
  2. 瀏覽器執行惡意代碼

XSS攻擊分類segmentfault

類型 存儲區 插入點
反射型XSS URL HTML
存儲型XSS 後端數據庫 HTML
DOM型XSS 後端數據庫/前端存儲/URL 前端JS

反射型XSS攻擊後端

反射型XSS只是把用戶輸入的數據「反射」給瀏覽器,攻擊者每每須要誘使用戶操做一個惡意連接,才能攻擊成功。反射型XSS也叫作「非持久型XSS」(Non-persistent XSS)跨域

存儲型XSS攻擊瀏覽器

存儲型XSS會把用戶輸入的數據「存儲」在服務器端,這種XSS具備很強的穩定性

比較常見的一個場景就是,黑客寫下一篇包含有惡意JS代碼的博客文章,發表後,全部訪問該博客文章的用戶都會在他們的瀏覽器中執行這段惡意的JS代碼。黑客把惡意的腳本保存到服務器端,因此這種XSS攻擊就叫作「存儲型XSS」

存儲型XSS一般也叫作「持久型XSS」(Persistent XSS)

DOM型XSS攻擊

DOM型XSS從效果上來講也是反射型XSS,經過修改頁面的DOM節點造成XSS,稱之爲DOM型XSS

實際上,這種類型的XSS並不是按照「數據是否保存在服務器端」來劃分,單獨劃分出來,是由於DOM型XSS的造成緣由比較特別,發現它的安全專家專門提出了這種類型的XSS。出於歷史緣由,也就把它單獨做爲一個分類了。

XSS攻擊類型區別

  1. 存儲型XSS的惡意代碼存在數據庫裏,反射型XSS的惡意代碼存在URL裏

  2. DOM型XSS攻擊中,取出和執行惡意代碼由瀏覽器端完成,屬於前端JS自身的安全漏洞,而其餘兩種XSS都屬於服務端的安全漏洞

XSS攻擊檢測

  • 使用XSS攻擊字符串手動檢測XSS漏洞 github.com/0xsobky/Hac…

  • 使用掃描工具自動檢測XSS漏洞 例如Arachni、Mozilla HTTP Observatory、w3af等

XSS攻擊防護

  1. 輸入輸出檢查
  2. 避免內聯事件
  3. 富文本類使用標籤白名單
  4. 增長攻擊難度,下降攻擊後果
    • 增長驗證碼,防止腳本冒充用戶提交危險操做
    • 經過CSP、輸入長度配置、接口安全措施等方法
  5. 主動檢測發現

針對以上總結的XSS攻擊的防護方法,咱們再來針對CSP與HttpOnly進行進一步的瞭解與分析:

  • CSP (Content Security Policy)

    1. 禁止加載外域代碼,防止複雜的攻擊邏輯
    2. 禁止外域提交,網站被攻擊後,用戶的數據不會泄露到外域
    3. 禁止內聯腳本執行
    4. 禁止未受權的腳本執行
    5. 合理使用上報能夠及時發現XSS,利於儘快修復問題
  • HttpOnly Cookie

    禁止JS讀取敏感Cookie,攻擊者完成XSS注入後也沒法竊取Cookie

XSS攻擊帶來的不光是Cookie劫持問題,還有竊取用戶信息、模擬用戶身份執行操做 攻擊者利用AJAX構造HTTP請求,以用戶身份完成的操做,就是在不知道用戶Cookie的狀況下進行的。

2. CSRF攻擊

CSRF(Cross-site request forgery)跨站請求僞造,攻擊者盜用受害人身份,以受害人的名義發送惡意請求。 其本質是重要操做的全部參數都是能夠被攻擊者猜想到的,攻擊者只有預測出URL的全部參數與參數值,才能成功地構造一個僞造的請求;反之,攻擊者將沒法攻擊成功。

CSRF攻擊要素

  1. 攻擊通常發起在第三方網站,被攻擊的網站沒法防止攻擊發生
  2. 攻擊利用受害者在被攻擊網站的登陸憑證,冒充受害者提交操做,而不是直接竊取數據
  3. 整個過程攻擊者並不能獲取受害者登陸憑證,只是冒用
  4. 跨站請求能夠是圖片URL、超連接、CORS、Form提交等

CSRF攻擊防護

  1. 阻止不明外域的訪問

    • 同源檢測
      • 如何判斷請求是否來自外域?HTTP協議中,每個異步請求都會攜帶兩個Header,用於標記來源域名:Origin Header、Referer Header,這兩個Header在瀏覽器發起請求時,大多數狀況會自動帶上,而且不能由前端自定義內容。服務器能夠經過解析這兩個Header中的域名,肯定請求的來源域。
    • Samesite Cookie
      • SameSite-cookies 是Google起草的一份草案來改進HTTP協議,就是爲Set-Cookie響應頭新增Samesite屬性,用來標明這個Cookie是個「同站 Cookie」,同站Cookie只能做爲第一方Cookie,不能做爲第三方Cookie,Samesite 有兩個屬性值,分別是Strict和Lax:
        • Samesite=Strict:嚴格模式,代表這個 Cookie 在任何狀況下都不可能做爲第三方 Cookie,絕無例外
        • Samesite=Lax:寬鬆模式
  2. 提交時要求附加本域才能獲取的信息

    • CSRF Token
      1. 將CSRF Token輸出到頁面中
      2. 頁面提交的請求攜帶這個Token
      3. 服務器驗證Token是否正確
    • 雙重Cookie驗證
      • 用戶訪問網站頁面時,向請求域名注入一個Cookie,前端向後端發起請求時,取出Cookie,添加到URL的參數中,後端接口驗證Cookie中的字段與URL參數中的字段是否一致,不一致則拒絕。
      • 優勢:無需使用Session,適用面更廣,易於實施。Token儲存於客戶端中,不會給服務器帶來壓力。相對於Token,實施成本更低,能夠在先後端統一攔截校驗,而不須要一個個接口和頁面添加。
      • 缺點:Cookie中增長了額外的字段;若是有其餘漏洞(例如XSS),攻擊者能夠注入Cookie,那麼該防護方式失效。難以作到子域名的隔離。爲了確保Cookie傳輸安全,採用這種防護方式的最好確保用整站HTTPS的方式,若是還沒切HTTPS的使用這種方式也會有風險。

CSRF測試

  1. 設置瀏覽器代理
  2. 使用合法帳戶訪問網站開始測試
  3. 經過CSRF修改並僞造請求
  4. 拿到結果若有漏洞進行修復

3. SQL注入

經過Web應用接口注入SQL語法,破壞原有SQL結構,達到攻擊行爲。 若是網站存在注入漏洞,至關於將數據庫直接暴露在攻擊者面前 根據注入位置及方式不一樣分分爲POST注入、GET注入、cookie注入、盲注、延時注入、搜索注入、base64注入等

SQL注入要素

  1. 跳過帳戶權限驗證達到越權
  2. 獲取數據庫關鍵信息從而進行脫庫
  3. 特別狀況下還能夠修改數據庫內容,若是數據庫權限分配存在問題,攻擊者能夠經過SQL注入漏洞直接獲取webshell或者服務器系統權限

SQL注入防護

  1. 數據校驗
    • 檢查數據格式
    • 使用數據庫特定的敏感字符轉義函數把用戶提交數據進行轉義
  2. 權限限制
  3. 日誌處理
    • 數據庫操做失敗的時,儘可能不將原始錯誤日誌返回,如類型錯誤、字段不匹配等,把代碼裏的SQL語句暴露出來,以防止攻擊者利用錯誤信息進行SQL注入

4. XXE漏洞

XXE (XML External Entity)外部實體漏洞,當應用程序解析XML輸入時,若是沒有禁止外部實體的加載,致使可加載惡意外部文件和代碼,形成任意文件讀取、命令執行、內網端口掃描等攻擊。只在可以接收XML格式參數的接口才會出現

XXE漏洞防護

  1. 禁用外部實體
  2. 過濾用戶提交的XML數據

5. JSON劫持

JSON劫持(JSON Hijacking)是用於獲取敏感數據的一種攻擊方式,屬於CSRF攻擊的範疇

JSON劫持防護

  1. X-Requested-With標識
  2. 瀏覽器JSON數據識別
  3. 禁止JS執行JSON數據

6. XST攻擊

XST攻擊(cross-site tracing)當Web服務器啓用TRACE時,提交的請求頭會在服務器響應Body中完整返回,其中HTTP頭極可能包括Session Token、Cookies或其它認證信息,攻擊者能夠利用漏洞獲取用戶信息

XST攻擊防護

禁用HTTP TRACE方法

7. 暴力破解

弱密碼(Weak Password)被他人猜到或被破解工具暴力破解

暴力破解防護

  1. 增長密碼複雜度
  2. 限制嘗試次數

8. 信息泄漏

Web服務器或應用程序沒有正確處理一些特殊請求,泄露 敏感信息,如用戶名、密碼、源代碼、服務器信息、配置信息等

信息泄漏防護

  1. 應用程序報錯時,不對外產生調試信息
  2. 過濾用戶提交的數據與特殊字符
  3. 保證源代碼、服務器配置安全

9. 其餘漏洞

  1. 目錄遍歷漏洞
  2. 命令執行漏洞
  3. 文件上傳漏洞
  4. 業務漏洞
  5. 框架或應用漏洞

參考資料

相關文章
相關標籤/搜索