1、CSRF攻擊原理css
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的機制以後,危害性我相信你們已經不言而喻了,我能夠僞造某一個用戶的身份給其好友發送垃圾信息,這些垃圾信息的超連接可能帶有木馬程序或者一些欺騙信息(好比借錢之類的),若是CSRF發送的垃圾信息還帶有蠕蟲連接的話,那些接收到這些有害信息的好友萬一打開私信中的鏈接就也成爲了有害信息的散播着,這樣數以萬計的用戶被竊取了資料種植了木馬。整個網站的應用就可能在瞬間奔潰,用戶投訴,用戶流失,公司聲譽一落千丈甚至面臨倒閉。曾經在MSN上,一個美國的19歲的小夥子Samy利用css的background漏洞幾小時內讓100多萬用戶成功的感染了他的蠕蟲,雖然這個蠕蟲並無破壞整個應用,只是在每個用戶的簽名後面都增長了一句「Samy 是個人偶像」,可是一旦這些漏洞被惡意用戶利用,後果將不堪設想,一樣的事情也曾經發生在新浪微博上面。
舉例:
CSRF攻擊的主要目的是讓用戶在不知情的狀況下攻擊本身已登陸的一個系統,相似於釣魚。如用戶當前已經登陸了郵箱,或bbs,同時用戶又在使用另一個,已經被你控制的站點,咱們姑且叫它釣魚網站。這個網站上面可能由於某個圖片吸引你,你去點擊一下,此時可能就會觸發一個js的點擊事件,構造一個bbs發帖的請求,去往你的bbs發帖,因爲當前你的瀏覽器狀態已是登錄狀態,因此session登錄cookie信息都會跟正常的請求同樣,純自然的利用當前的登錄狀態,讓用戶在不知情的狀況下,幫你發帖或幹其餘事情。redis
2、CSRF防護mongodb