大白話理解網絡攻擊(XSS、CSRF)


本文主要介紹了 XSS 和 CSRF 的攻擊原理和防御措施及兩者區別。接下來我們來了解下。

XSS

一、XSS原理

Xss(cross-site scripting)攻擊:通過向某網站寫入js腳本或插入惡意 html標簽來實現攻擊

比如:攻擊者在論壇中放一個看似安全的鏈接,騙取用戶點擊后,竊取cookie中的用戶私密信息;

或者攻擊者在論壇中加一個惡意表單,當用戶提交表單的時候,卻把信息傳送到攻擊者的服務器中,而不是用戶原本以為的信任站點。 

二、XSS攻擊的類型

分為存儲性(持久型)、反射型(非持久型)、基於DOM

1、存儲性(持久型)

用戶輸入的帶有惡意腳本的數據存儲在服務器端。當瀏覽器請求數據時,服務器返回腳本並執行。

常見的場景:

攻擊者在社區或論壇上寫下一篇包含惡意 Js代碼的文章或評論,文章或評論發表后,所有訪問該文章或評論的用戶,都會在他們的瀏覽器中執行這段惡意的 JavaScript 代碼。

2、反射型(非持久型)

把用戶輸入的數據"反射"給瀏覽器。通常是,用戶點擊鏈接或提交表單時,攻擊者向用戶訪問的網站注入惡意腳本。

常見的場景:

在正常頁面上添加一個惡意鏈接。惡意鏈接的地址指向localhost:8080。然后攻擊者有一個node服務來處理對localhost:8080的請求:

當用戶點擊惡意鏈接時,頁面跳轉到攻擊者預先准備的localhost:8080頁面,執行了 惡意的js 腳本,產生攻擊。

3、基於DOM

基於DOM的XSS是指通過惡意腳本修改頁面的DOM結構。是純粹發生在 客戶端的攻擊。

三、XSS防范方法

1) 內容安全策略 (CSP)   -https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP

它是一個額外的安全層,用於檢測並削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數據注入攻擊等。無論是數據盜取、網站內容污染還是散發惡意軟件,這些攻擊都是主要的手段。

其實質就是白名單制度,開發者明確告訴客戶端,哪些外部資源可以加載和執行,等同於提供白名單。它的實現和執行全部由瀏覽器完成,開發者只需提供配置。

兩種方法可以啟用 CSP:

  • 設置 HTTP 的 Content-Security-Policy 頭部字段
  • 設置網頁的<meta>標簽。

2) HttpOnly阻止Cookie劫持攻擊

服務器端Set-Cookie字段設置HttpOnly參數,這樣可以避免。(想了解Set-Cookie, 可參考https://www.cnblogs.com/renzm0318/p/11643841.html)

這時候,客戶端的Document.cookie API無法訪問帶有 HttpOnly 標記的Cookie, 但可以設置cookie。

注:發起XSS的攻擊者既然可以通過注入惡意腳本獲取用戶的 Cookie 信息。

所以,嚴格來說,HttpOnly 並非阻止 XSS 攻擊,而是能阻止 XSS 攻擊后的 Cookie 劫持攻擊。 

CSRF

一、CSRF原理

CSRF(Cross Site Request Forgery),跨站請求偽造。

CSRF 攻擊是攻擊者借助用戶的 Cookie 騙取服務器的信任,以用戶名義偽造請求發送給服務器。如:在請求的url后加入一些惡意的參數

換句話說,CSRF就是利用用戶的登錄態發起惡意請求

場景:

假設某銀行網站A以GET請求來發起轉賬操作,轉賬的地址為www.xxx.com/transfer.do?accountNum=l000l&money=10000,參數accountNum表示轉賬的賬戶,參數money表示轉賬金額。
而某大型論壇B上,一個惡意用戶上傳了一張圖片,而圖片的地址欄中填的並不是圖片的地址,而是前而所說的磚賬地址:<img src="http://www.xxx.com/transfer.do?accountNum=l000l&money=10000">
當你登錄網站A后,沒有及時登出,這時你訪問了論壇B,不幸的事情發生了,你會發現你的賬號里面少了10000塊...
上述只是舉例呦,轉賬怎么可能是get請求,為了保險,肯定是post請求,更何況銀行的交易付款會有登錄密碼和支付密碼等一系列屏障,流程復雜得多,安全系數也高得多

二、CSRF防范

1、添加 token 驗證

在 HTTP 請求中以參數的形式加入一個隨機產生的 token,並在服務器端建立一個攔截器來驗證這個 token,若請求無 token 或者 token 不正確,則認為可能是 CSRF 攻擊而拒絕該請求。

2、Referer Check

在HTTP頭中有一個字段叫做Referer,它記錄了該HTTP請求的來源地址。通過Referer Check,可以檢查是否來自合法的"源".

例如:

從www.user.com發起的刪帖請求,那么Referer值是http://www.user.com, 刪帖請求應該被允許;

而如果是從CSRF攻擊者構造的頁面www.attack.com發起刪帖請求, 那么Referer值是http://www.attack.com, 刪帖請求應該被阻止。

3、驗證碼

驗證碼會強制用戶必須與應用進行交互,才能完成最終請求,但是也不能給網站所有的操作都加上驗證碼,所以只能作為防御 CSRF 的一種輔助手段,而不能作為最終的解決方案

XSS和CSRF區別:

  • XSS是利用用戶對指定網站的信任
  • CSRF是利用網站對用戶的信任


免責聲明!

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



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