跨站點請求偽造 CSRF 總結和防禦

2022-09-15 21:36:25 字數 2334 閱讀 9023

構建乙個位址,比如說是刪除某個部落格**部落格的鏈結,然後誘使已經登入過該**的使用者點選惡意鏈結,可能會導致使用者通過自己的手將曾經發布在該**的部落格在不知情的情況下刪除了。這種構建惡意鏈結,假借受害者的手造成損失的攻擊方式就叫csrf-跨站點請求偽造。

cookie分類

cookie根據有無設定過期時間分為兩種,沒有設定過期時間的為session cookie(會話cookie),firefoox有標註哪些cookie是會話cookie,這種cookie儲存在記憶體空間中,在瀏覽器程序的生命週期中都有效,但是一關閉瀏覽器就被抹除。另外一種設定過期時間的叫做third-party cookie,也稱之為本地cookie,儲存在本地,在過期時間內都可以使用。

csrf實現原理

一般使用者的操作都需要登入以後才能進行,csrf就是利用使用者的登入cookie,讓使用者在自己的惡意**中向部落格**傳送了刪除請求。比如讓使用者點選鏈結黑客的**,黑客在**中加上乙個鏈結,該鏈結實際是向部落格**傳送乙個刪除請求:

惡意**

這是黑客誘導客戶訪問的惡意**位址

要實現這個還需要用到使用者登入csdn後的cookie,之前談同源策略的時候說過,img、iframe之類的標籤不受同源策略的影響,所以當向csdn傳送請求時,會將csdn相關的cookie都一併提交上去(會提交哪些cookie需要根據cookie作用域來決定),這樣csdn驗證cookie後誤認為是使用者在操作,實際上使用者是在無意識下刪除了自己的文章。

老版的ie,safari是禁止img、iframe標籤請求時傳送cookie的,但是最新的firefox以及chrome等主流瀏覽器都是允許的。

同源策略是瀏覽器實現的,只要請求發出瀏覽器,同源策略和跨域就用不到了!

我在自己部落格找到乙個get請求(部落格點讚請求):

從上圖可以看到點讚請求帶了一堆cookie驗證到後台,現在我寫乙個新介面,介面裡面用img標籤跨域訪問這個請求(前提是csdn是登入狀態,不然拿不到cookie驗證);

啟動訪問本地請求:

上面的本地介面確實因為訪問csdn的請求而載入了一些csdn的cookie,其中應該包含了登陸驗證的字段,所以對應的這個服務應該成功了,檢查下那篇部落格確實多了乙個點贊。

方案一 驗證碼

強制需要客戶進行互動才能操作。跟csrf在客戶不知情的情況下完成攻擊的方式相餑

方案二 referer check

referer check最常見的應用就是防止盜鏈,通過檢視請求的**判斷請求是否合理,比如通過攻擊者的**嵌入訪問部落格的位址,那referer就是攻擊者**的位址,這樣很大程度能判斷出這是乙個csrf攻擊,但是這個方法的缺陷是:伺服器並不是每次都能取到referer資訊。

方案三 構造不可預見性url

csrf能夠攻擊成功,其本質原因是請求的url被攻擊者猜到,如果請求的url具有不可**性,那麼攻擊者也就無從下手。現在最通用的方式就是在url中加入乙個token引數。token可以存在使用者的cookie中,伺服器也存有該客戶對應的token值。因為csrf攻擊只是利用登入cookie,並無法獲取cookie的具體值(除非使用者還被xss攻擊了,導致cookie洩露,那就無濟於事了)。

token應該同時放在提交表單中與伺服器session中,在有效時間之內,只要伺服器session沒有被使用(即使用者沒有提交表單,這個需要伺服器提供乙個方案判斷某個session是否已經被使用過),都使用同乙個token,否則需要重新生成token,並儲存到表單和session中。

token也應該注意保密性,不應出現在url中,因為這樣可以通過referer獲取到,乙個盡量放在表單中,把敏感的操作由get改為post,一form表單或者ajax的形式提交,可以避免token洩露。

方案四: samesite cookie,防止 csrf 攻擊

防止 csrf 攻擊的辦法已經有 csrf token 校驗和 referer 請求頭校驗。為了從源頭上解決這個問題,google 起草了乙份草案來改進 http 協議,那就是為 set-cookie 響應頭新增 samesite 屬性,它用來標明這個 cookie 是個「同站 cookie」,同站 cookie 只能作為第一方 cookie,不能作為第三方 cookie。samesite 有兩個屬性值,分別是 strict 和 lax

CSRF跨站點偽造攻擊?

跨站點偽造,顧名思義,在另外乙個站點存在著訪問被攻擊站點的鏈結,鏈結觸發後會攜帶被攻擊連線的cookie。這樣就偽造了一條非使用者自身的操作。危險!假如有以下場景 1 你在某社交 上面進行了登入。使用完後並沒有登出,而 使用cookie標識使用者狀態。2 此時你訪問了某個知名顏色 這個 html 中...

CSRF跨站點請求偽造原理及防禦

csrf攻擊原理比較簡單,如圖1所示。其中web a為存在csrf漏洞的 web b為攻擊者構建的惡意 user c為web a 的合法使用者。圖1 csrf攻擊原理 1.使用者c開啟瀏覽器,訪問受信任 a,輸入使用者名稱和密碼請求登入 a 2.在使用者資訊通過驗證後,a產生cookie資訊並返回給...

跨站請求偽造 CSRF

跨站請求偽造 csrf 顧名思義就是在其他非法 呼叫了正常 的介面,攻擊的方法是在頁面中包含惡意 或者鏈結,攻擊者認為被攻擊的使用者有權訪問另乙個 如果使用者在那個 的會話沒有過期,攻擊者就能執行未經授權的操作。大多數 rails 程式都使用 cookie 儲存會話,可能只把會話 id 儲存在 co...