CSRF攻擊原理及防御

CSRF攻擊原理及防御

一、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的機制之后,危害性我相信大家已經不言而喻了,我可以偽造某一個用戶的身份給其好友發送垃圾信息,這些垃圾信息的超鏈接可能帶有木馬程序或者一些欺騙信息(比如借錢之類的),如果CSRF發送的垃圾信息還帶有蠕蟲鏈接的話,那些接收到這些有害信息的好友萬一打開私信中的連接就也成為了有害信息的散播著,這樣數以萬計的用戶被竊取了資料種植了木馬。整個網站的應用就可能在瞬間奔潰,用戶投訴,用戶流失,公司聲譽一落千丈甚至面臨倒閉。曾經在MSN上,一個美國的19歲的小伙子Samy利用css的background漏洞幾小時內讓100多萬用戶成功的感染了他的蠕蟲,雖然這個蠕蟲并沒有破壞整個應用,只是在每一個用戶的簽名后面都增加了一句“Samy 是我的偶像”,但是一旦這些漏洞被惡意用戶利用,后果將不堪設想,同樣的事情也曾經發生在新浪微博上面。?

  舉例:?

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

?

二、CSRF防御

  • 通過 referer、token 或者 驗證碼 來檢測用戶提交。
  • 盡量不要在頁面的鏈接中暴露用戶隱私信息。
  • 對于用戶修改刪除等操作最好都使用post 操作 。
  • 避免全站通用的cookie,嚴格設置cookie的域。



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H3C FTP配置示例

轉載于:https://www.cnblogs.com/fanweisheng/p/11156596.html

用dotnet自帶的mail類發郵件出現的問題

在使用dotnet自帶的mail類發送郵件的時候,因為默認的smtp端口是25,如果更改了smtp的端口號,則需加上MailMessage msg = new MailMessage();msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport&…

Angular CLI ng 指令指南

Angular CLI 使用教程指南參考 Angular CLI 現在雖然可以正常使用但仍然處于測試階段. Angular CLI 依賴 Node 4 和 NPM 3 或更高版本. 安裝

spring源碼閱讀(1/4) - Bean生成

上午去繳了上次沒帶駕駛證的扣分罰款,最近在圖書館沒事就看曾國藩家書,曾國藩說人要明強。光強沒有用,你要明強。也就是說要強的有道理。曾國藩又說,做學問不能做死學問,做學問其實很重要的事就是能懂得孝悌&#xff0…

NodeJS解決跨域問題:Access-Control-Allow-Origin

今天在玩vue-resource時,后臺使用nodejs來提供數據,由于需要跨域,在網上也找到了解決方法。 vue-resource代碼(其實就是ajax技術): this.$http.get({url:"http://localhost:3000/getdata"}) .then(function (data) {co…

windows10系統下MongoDB的安裝及環境配置

windows10系統下MongoDB的安裝及環境配置: MongoDB的安裝 下載地址: https://www.mongodb.com/download-center (這是windows10環境下的教程!請注意!) 下載后,我們點擊mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed…

Net EF to MySQL生成edmx文件時報錯:StrongTypingException:表“TableDetails中列“IsPrimaryKey的值為DBNull...

使用Net寫項目,數據庫用的MySQL,EF生成edmx文件時,報錯,StrongTypingException:表“TableDetails"中列“IsPrimaryKey"的值為DBNull。 解決方法: 1.重啟MySQL服務 2.MySQL中運行下以下命令: use …

MongoDB之在mac上設置環境變量

要下班,簡介做個筆記。設置環境變量在基于unix/linux的操作系統下進行程序開發,使用環境變量將會方便。通過設置環境變量將可以在任意目錄通過輸入程序名來執行設定目錄下的程序。不需要通過cd將工作目錄改變到程序目錄再執行程序。而且免去了輸入"…

popup a new windows

popup a new windows window.open(url, newwindow, height500, width850, top0, left0, toolbarno, menubarno, scrollbarsno, resizableno,locationno, statusno); 轉載于:https://www.cnblogs.com/sandy_liao/archive/2010/06/24/1764533.html

CSS clip:rect矩形剪裁功能

CSS中有一個屬性叫做clip,為修剪,剪裁之意。配合其屬性關鍵字rect可以實現元素的矩形裁剪效果。此屬性安安穩穩地存在于CSS2.1中,且使用上基本上沒有類似于max-height/display:table-cell等瀏覽器的兼容性問題。 根據Dreamweaver的自動提示&a…

CSS隱藏元素的十四種方法

通過設置width:0或者height:0隱藏一個元素,文字隱藏可以設置color為背景色或transparent,但內容還在,所以用font-size:0; 將元素的opacity設置為0,元素本身還在,只是看不見; 通過絕對定位將元…

jquery.lazyload.js詳解

簡介lazyload.js用于長頁面圖片的延遲加載,視口外的圖片會在窗口滾動到它的位置時再進行加載,這是與預加載相反的。優點:它可以提高頁面加載速度;在某些情況清晰它也可以幫助減少服務器負載。安裝bower安裝:$ bower in…

Spring Boot Cache使用與整合

參考&#xff1a; 史上最全的Spring Boot Cache使用與整合Spring Cache擴展&#xff1a;注解失效時間主動刷新緩存 項目地址使用本地Caffeine緩存 引入依賴包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte…

vue-cli的打包配置文件

轉載原文: 詳解 vue-cli 的打包配置文件代碼&#xff08;給大家寫寫注釋&#xff09;. 一、vue-cli都做了什么 1、build/dev-server.js 文件 項目node的啟動文件&#xff0c;這里面做了webpack配置和node操作&#xff0c; 2、build/webpack.base.conf.js webpack基本配置文件…

Node.js 部署免費/自動續訂 HTTPS

統計了使用 Chrome 瀏覽器&#xff0c;訪問的站點統計中&#xff0c;HTTPS 使用率的增長情況&#xff1a;而在今年 2 月份&#xff0c;Chrome 團隊也宣布&#xff0c;將在 2018 年 7 月份發布的 Chrome 68 中&#xff0c;將沒有部署 HTTPS 的網站標記為 "不安全"。簡…

GSON 循環引用的對象轉為 JSON 造成棧溢出

對象轉 JSON 可能引發棧溢出的異常&#xff0c;一般是因為對象中的循環引用引起不斷遞歸。 常見的作法就是&#xff1a; 換一種 JSON 的序列化工具&#xff0c;比如 fastjson 默認支持消除對同一對象循環引用transient 修飾屬性顯式排除對象的某些屬性1. java對象引用成環說明 …

一些雜七雜八的前端知識1

一、this指向 this是函數運行時自動生成的一個內部對象&#xff0c;只能在函數內部使用 1. 指向全局變量 純粹的函數調用 2. 作為對象方法的調用 對象調用某個函數&#xff0c;這個函數里面所包含的this也就指向使用這個函數的對象了 3. 函數構造新對象時調用 new 4. a…

最新的vue webpack模板沒有dev-server.js文件,進行后臺數據模擬筆記

最新的vue里dev-server.js被替換成了webpack-dev-conf.js 在模擬后臺數據的時候直接在webpack-dev-conf.js文件中修改 第一步&#xff0c;在const portfinder require(‘portfinder’)后添加//第一步 const express require(express) const app express()//請求server var a…

20080331 - What is a PID, How is it useful when troubleshooting a system

PID Process Identifier, 是一個全局唯一的用來標識進程的整數。在多任務系統中&#xff0c;可用來診斷系統中發生錯誤的進程。 轉載于:https://www.cnblogs.com/likun/archive/2008/03/31/1130458.html

記一次el-input使用的坑

記一次el-input使用的坑 el-input使用不同與原生input&#xff0c;所以在vue中改變綁定的數據時需注意 <el-input v-model"form.schedule" input"validateNumber($event)" />要想在input時改變form.schedule的值來改變輸入框顯示的值&#xff0c;以…