CSRF攻擊原理及防禦

2022-07-06 19:12:08 字數 1823 閱讀 9358

**於

一、csrf攻擊原理

csrf是什麼呢?csrf全名是cross-site request forgery,是一種對**的惡意利用,csrf比xss更具危險性。想要深入理解csrf的攻擊特性我們有必要了解一下**session的工作原理。 

session我想大家都不陌生,無論你用.net或php開發過**的都肯定用過session物件,然而session它是如何工作的呢?如果你不清楚請往下看。 

先問個小問題:如果我把瀏覽器的cookie禁用了,大家認為session還能正常工作嗎? 

答案是否定的,我在這邊舉個簡單的例子幫助大家理解session。 

比如我買了一張高爾夫俱樂部的會員卡,俱樂部給了我一張帶有卡號的會員卡。我能享受哪些權利(比如我是高階會員卡可以打19洞和後付費喝飲料,而初級會員卡只能在練習場揮桿)以及我的個人資料都是儲存在高爾夫俱樂部的資料庫裡的。我每次去高爾夫俱樂部只需要出示這張高階會員卡,俱樂部就知道我是誰了,並且為我服務了。

這裡我們的高階會員卡卡號 = 儲存在cookie的sessionid; 

而我的高階會員卡權利和個人資訊就是服務端的session物件了。 

我們知道http請求是無狀態的,也就是說每次http請求都是獨立的無關之前的操作的,但是每次http請求都會將本域下的所有cookie作為http請求頭的一部分傳送給服務端,所以服務端就根據請求中的cookie存放的sessionid去session物件中找到該會員資料了。 

當然session的儲存方法多種多樣,可以儲存在檔案中,也可以記憶體裡,考慮到分布式的橫向擴充套件我們還是建議把它儲存在第三方媒介中,比如redis或者mongodb。 

我們理解了session的工作機制後,csrf也就很容易理解了。csrf攻擊就相當於惡意使用者a複製了我的高階會員卡,哪天惡意使用者a也可以拿著這張假冒的高階會員卡去高爾夫俱樂部打19洞,享受美味的飲料了,而我在月底就會收到高爾夫俱樂部的賬單! 

舉例: 

csrf攻擊的主要目的是讓使用者在不知情的情況下攻擊自己已登入的乙個系統,類似於釣魚。如使用者當前已經登入了郵箱,或bbs,同時使用者又在使用另外乙個,已經被你控制的站點,我們姑且叫它釣魚**。這個**上面可能因為某個吸引你,你去點選一下,此時可能就會觸發乙個js的點選事件,構造乙個bbs發帖的請求,去往你的bbs發帖,由於當前你的瀏覽器狀態已經是登陸狀態,所以session登陸cookie資訊都會跟正常的請求一樣,純天然的利用當前的登陸狀態,讓使用者在不知情的情況下,幫你發帖或幹其他事情。

二、csrf防禦

·通過 referer、token 或者 驗證碼 來檢測使用者提交。

·盡量不要在頁面的鏈結中暴露使用者隱私資訊。

·對於使用者修改刪除等操作最好都使用post 操作 。

·避免全站通用的cookie,嚴格設定cookie的域。

三、csrf防禦示例

這裡我使用基於django中csrf-token進行防禦

(1)利用form表單進行post提交

(2)利用ajax進行post提交

html示例同上

$(function () 

});$('#btu-1').click(function ()

data:,

})})

})()

$('#btu-2').click(function ()

data:,

})})

})()

CSRF 攻擊及防禦

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

CSRF攻擊與防禦

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

CSRF攻擊和防禦

csrf攻擊和防禦 csrf 跨站點請求偽造 存在於這樣的情況,乙個宅a登陸b站,輸入了使用者名稱和密碼,通過驗證後,b站產生cookie資訊並返回給瀏覽器。a沒有關閉b站,在同一瀏覽器下開啟了黑客發來的 c,c中隱藏著一段功能為獲取b站cookie的 此時恰巧b站和a的session尚未過期,瀏覽...