web安全防范策略


一、XSS跨站腳本攻擊

  1、XSS攻擊有兩大步驟:

    (1)、攻擊者提交惡意代碼

    (2)、瀏覽器執行惡意代碼

  2、XSS攻擊的分類

    根據攻擊的來源,XSS攻擊可以分為存儲型、反射型、DOM型三種:

類型 存儲區* 插入點* 防范措施
存儲型 XSS 后端數據庫 HTML

1、純前端渲染,把代碼和數據分割開

2、對html充分轉義

反射型 XSS URL HTML
DOM 型 XSS 后端數據庫/前端存儲/URL 前端 JavaScript

1、避免使用.innerHTML.outerHTMLdocument.write()等方法

2、DOM 中的內聯事件監聽器(locationonclickonerroronloadonmouseove等)、

<a> 標簽的 href 屬性,JavaScript 的 eval()setTimeout()setInterval() 等,

都可以把字符串作為代碼運行,使用的時候需要注意

 

 

 

 

 

 

 

  存儲型 XSS

  存儲型 XSS 的攻擊步驟:

  1. 攻擊者將惡意代碼提交到目標網站的數據庫中。
  2. 用戶打開目標網站時,網站服務端將惡意代碼從數據庫取出,拼接在 HTML 中返回給瀏覽器。
  3. 用戶瀏覽器接收到響應后解析執行,混在其中的惡意代碼也被執行。
  4. 惡意代碼竊取用戶數據並發送到攻擊者的網站,或者冒充用戶的行為,調用目標網站接口執行攻擊者指定的操作。

  這種攻擊常見於帶有用戶保存數據的網站功能,如論壇發帖、商品評論、用戶私信等。

  反射型 XSS

  反射型 XSS 的攻擊步驟:

  1. 攻擊者構造出特殊的 URL,其中包含惡意代碼。
  2. 用戶打開帶有惡意代碼的 URL 時,網站服務端將惡意代碼從 URL 中取出,拼接在 HTML 中返回給瀏覽器。
  3. 用戶瀏覽器接收到響應后解析執行,混在其中的惡意代碼也被執行。
  4. 惡意代碼竊取用戶數據並發送到攻擊者的網站,或者冒充用戶的行為,調用目標網站接口執行攻擊者指定的操作。

  反射型 XSS 跟存儲型 XSS 的區別是:存儲型 XSS 的惡意代碼存在數據庫里,反射型 XSS 的惡意代碼存在 URL 里。

  反射型 XSS 漏洞常見於通過 URL 傳遞參數的功能,如網站搜索、跳轉等。

  由於需要用戶主動打開惡意的 URL 才能生效,攻擊者往往會結合多種手段誘導用戶點擊。

  POST 的內容也可以觸發反射型 XSS,只不過其觸發條件比較苛刻(需要構造表單提交頁面,並引導用戶點擊),所以非常少見。

  DOM 型 XSS

  DOM 型 XSS 的攻擊步驟:

  1. 攻擊者構造出特殊的 URL,其中包含惡意代碼。
  2. 用戶打開帶有惡意代碼的 URL。
  3. 用戶瀏覽器接收到響應后解析執行,前端 JavaScript 取出 URL 中的惡意代碼並執行。
  4. 惡意代碼竊取用戶數據並發送到攻擊者的網站,或者冒充用戶的行為,調用目標網站接口執行攻擊者指定的操作。

  DOM 型 XSS 跟前兩種 XSS 的區別:DOM 型 XSS 攻擊中,取出和執行惡意代碼由瀏覽器端完成,屬於前端 JavaScript 自身的安全漏洞,而其他兩種 XSS 都屬於服務端的安全漏洞。

  其它的防范策略:

    避免加載外域代碼、禁止外域提交、HTTP-only Cookie、驗證碼、輸入長度控制、表單數據指定具體類型等

二、CSRF(Cross-site request forgery)跨站請求偽造

  一個典型的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執行了自己定義的操作。

  1、常見的攻擊類型:

    (1)、get請求:例如利用圖片發起一次http請求,會攜帶cookie

    

<img style="width:0;" src="https://www.test.com/xxx" />

    (2)、post請求:例如利用隱藏表單自動提交

    

<form action="https://www.test.com/xxx" method=POST>
    <input type="hidden" name="account" value="xiaoming" />
    <input type="hidden" name="amount" value="10000" />
</form>
<script> document.forms[0].submit(); </script> 

    (3)、url攻擊:需要誘導用戶手動點擊

    

<a href="https://www.test.com/xxx" taget="_blank">
  一刀9999級,神級裝備,頂級神寵,開服就有!!
<a/>

  2、特點

  • 攻擊一般發起在第三方網站,而不是被攻擊的網站。被攻擊的網站無法防止攻擊發生。
  • 攻擊利用受害者在被攻擊網站的登錄憑證,冒充受害者提交操作;而不是直接竊取數據。
  • 整個過程攻擊者並不能獲取到受害者的登錄憑證,僅僅是“冒用”。
  • 跨站請求可以用各種方式:圖片URL、超鏈接、CORS、Form提交等等。部分請求方式可以直接嵌入在第三方論壇、文章中,難以進行追蹤。

  3、防護策略

    根據csrf的特點: 

  • CSRF(通常)發生在第三方域名。
  • CSRF攻擊者不能獲取到Cookie等信息,只是使用。

  制訂防護策略:

  • 阻止不明外域的訪問
    • 同源檢測
    • Samesite Cookie
  • 提交時要求附加本域才能獲取的信息
    • CSRF Token
    • 雙重Cookie驗證
    • 驗證碼

    

  同源檢測:根據請求的Origin和Referer,阻止外域請求或白名單以外的請求,html請求除外

  Samesite Cookie:設置cookie屬性:Strict 除了本域外任何外域都無法攜帶,頁面跳轉也不會攜帶;Lax:這個請求是(改變了當前頁面或者打開了新頁面)且同時是個GET請求,則攜帶;Samesite Cookie不支持子域。

  Token:請求攜帶隨機token, 這個token一定得是隨機的,讓攻擊者猜不到。可以是服務器生成的隨機數、也可以是隨機字符串、時間戳、userid加密生成的簽名

  雙重Cookie驗證:請求自己攜帶cookie的同時,在請求參數上也拼接cookie,服務器進行對比。(csrf攻擊可以攜帶cookie,但是無法獲取cookie),但是子域可以修改cookie,所以攻擊者可以通過子域修改cookie,使得雙Cookie驗證失效

  驗證碼:在關鍵位置使用驗證碼或類似支付密碼的方式

 

  其它一些防范措施:

  • 嚴格管理所有的上傳接口,防止任何預期之外的上傳內容(例如HTML)。
  • 添加Header X-Content-Type-Options: nosniff 防止黑客上傳HTML內容的資源(例如圖片)被解析為網頁。
  • 對於用戶上傳的圖片,進行轉存或者校驗。不要直接使用用戶填寫的圖片鏈接。
  • 當前用戶打開其他用戶填寫的鏈接時,需告知風險(這也是很多論壇不允許直接在內容中發布外域鏈接的原因之一,不僅僅是為了用戶留存,也有安全考慮)

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM