信安實踐 CSRF攻擊與防禦

2022-03-29 13:37:15 字數 2938 閱讀 2831

csrf(cross-site request forgery,跨站點偽造請求)是一種網路攻擊方式,該攻擊可以在受害者毫不知情的情況下以受害者名義偽造請求傳送給受攻擊站點,從而在未授權的情況下執行在許可權保護之下的操作,具有很大的危害性。具體來講,可以這樣理解csrf攻擊:攻擊者盜用了你的身份,以你的名義傳送惡意請求,對伺服器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的乙個操作,比如以你的名義傳送郵件、發訊息,盜取你的賬號,新增系統管理員,甚至於購買商品、虛擬貨幣轉賬等。

簡單地說,csrf攻擊就是攻擊者盜用了受害者的身份,在存在csrf漏洞的**上偽裝成受害者進行操作。

以下介紹涉及4個實體:

csrf攻擊步驟如下:

user訪問weba

weba的 cookie 未失效,如user未登出weba,或未清除weba的 cookie 等

user訪問webb

webb利用weba的 cookie 偽裝成userweba傳送請求

weba接受webb的請求,並根據請求攜帶的 cookie 認為webbuser,執行請求

csrf攻擊結束

首先看一下可以被攻擊的頁面:

在正常的業務流程中,user(在這是 user 名為 lab3_v)可以在這個頁面選擇將自己的 zoobars 轉移給其他使用者,可以理解為極度簡化版的銀行轉賬流程。執行這一操作,只需要 user 輸入 zoobars 數量和轉賬使用者名稱。

檢視此頁面的 html 源**,我們僅僅需要表單**,如下:

現在乙個攻擊者attacker,自己構建了乙個**,並且在自己的頁面中寫下如下**,假設此頁面的url是

這段**主要做的是:將 myzoo.islab.com/transfer.php 的表單頁面複製過來,簡單修改後將其隱藏,修改的地方主要是每次轉移的 zoobars 數量以及轉移使用者,並在頁面載入完畢後使用 js 模擬這個表單提交的事件。這樣,就完成了 csrf 攻擊,接下來 attacker 要做的工作就是引導其他使用者訪問這個頁面,只要有某個使用者,其在 myzoo.islab.com 的 cookies 還有效,他的 zoobars 就會被轉移到 attacker 。

比如,attacker 以使用者名稱 lab3_a 登入 myzoo.islab.com,修改自己的主頁的 profile 如下:

click me
之後,如果其他使用者,如 lab3_v 訪問了 lab3_a 的主頁,此時 lab3_v 有 10 個 zoobars, lab3_a 有 10 個 zoobars

之後, lab3_v 點選了 lab3_a 主頁上的鏈結,則 lab3_v 會被引導至攻擊頁面,並被竊取了 zoobars。

此時 lab3_v 有 9 個 zoobars, lab3_a 有 11 個 zoobars

使用驗證碼,強制使用者必須與應用進行互動,才能完成最終請求。在通常情況下,驗證碼能很好遏制 csrf 攻擊。但是出於使用者體驗考慮,**不能給所有的操作都加上驗證碼。因此驗證碼只能作為一種輔助手段,不能作為主要解決方案。此外,使用影象識別等方式也可以跳過驗證碼互動機制。

referer check在web最常見的應用就是"防止盜鏈"。同理,referer check也可以被用於檢查請求是否來自合法的"源"(referer值是否是指定頁面,或者**的域),如果都不是,那麼就極可能是csrf攻擊。

但是因為伺服器並不是什麼時候都能取到referer,所以也無法作為csrf防禦的主要手段。但是用referer check來監控csrf攻擊的發生,倒是一種可行的方法。

現在業界對csrf的防禦,一致的做法是使用乙個token(anti csrf token)。

例子:使用者訪問某個表單頁面。

服務端生成乙個token,放在使用者的session中,或者瀏覽器的cookie中。

在頁面表單附帶上token引數。

使用者提交請求後, 服務端驗證表單中的token是否與使用者session(或cookies)中的token一致,一致為合法請求,不是則非法請求。

這個token的值必須是隨機的,不可**的。由於token的存在,攻擊者無法再構造乙個帶有合法token的請求實施csrf攻擊。另外使用token時應注意token的保密性,盡量把敏感操作由get改為post,以form或ajax形式提交,避免token洩露。

CSRF攻擊與防禦

csrf是乙個偽造使用者請求的操作,所以需要構造使用者請求的所有引數才構成攻擊。表單token通過在請求引數中增加隨機數的辦法來阻止攻擊者獲得所有請求的引數 在頁面表單中增加乙個隨機數為token,每次響應頁面的token都不一樣,從正常頁面提交的請求會包含該token,而偽造者的請求無法獲得該值,...

XSS攻擊與CSRF攻擊與防禦

csrf 跨站點請求偽造 cross site request forgery 使用者在自己電腦瀏覽乙個站點a,進行登入動作後,瀏覽完後沒有退出站點。在新的tab頁面開啟乙個站點b 加入站點b是乙個釣魚 其中有乙個連線是跳到站點a,這時候站點a的登入資訊你並沒退出,站點a認為是使用者操作行為,站點b...

CSRF 攻擊及防禦

1.csrf 是什麼?csrf cross site request forgery 中文名稱 跨站請求偽造,也被稱為 one click attack session riding,縮寫為 csrf xsrf。2.scrf有哪些危害?攻擊者可以利用你的身份進行一些操作 傳送郵件,發訊息,盜取你的賬...