對CSRF(跨站請求偽造)的理解

2022-08-21 22:42:09 字數 2171 閱讀 2147

一、什麼是csrf?

csrf是cross site request forgery的縮寫,翻譯過來就是跨站請求偽造。那麼什麼是跨站請求偽造呢?讓我乙個詞乙個詞的解釋:

2、請求:即http請求。

3、偽造:在這裡可以理解為仿造、偽裝。

綜合起來的意思就是:從乙個**a中發起乙個到**b的請求,而這個請求是經過了偽裝的,偽裝操作達到的目的就是讓請求看起來像是從**b中發起的,也就是說,讓b**所在的伺服器端誤以為該請求是從自己**發起的,而不是從a**發起的。當然,請求一般都是惡意的。

要回答這個問題,就需要我們對cookie機制有一定的認識。關於cookie機制我會單獨寫一篇文章,這裡不做詳細介紹。這裡你只需要知道:之所以要偽裝成從b**發起的,是因為cookie是不能跨域傳送的。結合上面這個例子來說就是:如果從a**直接傳送請求到b**伺服器的話,是無法將b**中產生的cookie一起發給b伺服器的。

可能你還會問,為什麼非要傳送cookie呢?這是因為伺服器在使用者登入後會將使用者的一些資訊放到cookie中返回給客戶端,然後客戶端在請求一些需要認證的資源的時候會把cookie一起發給伺服器,伺服器通過讀取cookie中的資訊來進行使用者認證,認證通過後才會做出正確的響應。

a**訪問b**伺服器的一些需要認證的資源的時候,如果沒有cookie資訊,伺服器是拒絕訪問的,那麼a**就無法進行惡意操作。而偽造成b**的請求,就可以將b**的cookie一起發到b伺服器,這個時候就伺服器就認為該請求是合法的,就會給出正確的響應,這個時候,a**就達到目的了。

簡單一句話就是:攻擊者盜用了你的身份,以你的名義傳送惡意請求。

那麼,a**通過csrf能夠做那些操作呢?

二、csrf能夠做什麼呢?

csrf能夠做的事情包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬……造成的問題包括:個人隱私洩露以及財產安全。等等等等。

三、通俗點的例子

下面我們舉個例子來說明csrf攻擊是如何實現的。

url中的引數uid表示的是你要關注的使用者的id。

在正常情況下,即你登入b**後,點選「加關注」按鈕,瀏覽器會將上面的url連同b**產生的cookie一起傳送到b**的伺服器,b伺服器首先通過cookie進行使用者認證,如果cookie中的資訊正確,就會進行向資料庫中寫入記錄,這樣,你就成功關注了id為123的使用者。

在**a中的**中就是:,當使用者點選我發的文章的時候,瀏覽器就會請求這個src中的url,這樣就達到了在a**中請求b伺服器資源的目的,但是這樣還差了一步,因為請求還是從a**發出的,所以就沒有b**產生的cookie,所以還是達不到目的,那該怎樣做呢?

這樣,我的目的就達到了~~~~

而如果很多使用者都像你一樣,在登入b微博的同時檢視了我的帖子,那麼他們也一樣,默默無聞的關注了我~於是,我的粉絲量就大增!~~~

這裡要說明一下:上面例子中說的同時開啟多個網頁只是可以被利用的方法中的一種,但並不是唯一的一種,你要知道,黑客們可不是吃素的啊,他們手段多著呢~在此順道向黑客們的技術深深的致一敬~!

四、下面借用別人的**來說明乙個整個csrf的過程:

從上圖可以看出,要完成一次csrf攻擊,受害者必須依次完成兩個步驟:

1.登入受信任**a,並在本地生成cookie。

2.在不登出a的情況下,訪問危險**b。

看到這裡,你也許會說:「如果我不滿足以上兩個條件中的乙個,我就不會受到csrf的攻擊」。是的,確實如此,但你不能保證以下情況不會發生:

1.你不能保證你登入了乙個**後,不再開啟乙個tab頁面並訪問另外的**。

2.你不能保證你關閉瀏覽器了後,你本地的cookie立刻過期,你上次的會話已經結束。(事實上,關閉瀏覽器不能結束乙個會話,但大多數人都會錯誤的認為關閉瀏覽器就等於退出登入/結束會話了……)

3.上圖中所謂的攻擊**,可能是乙個存在其他漏洞的可信任的經常被人訪問的**。

五、get還是post

不是這樣的,如果b改用了post請求,那麼通過

這樣的方式的確無法達到目的了,但是攻擊者還是可以通過人為構造post請求的方式達到目的。

那麼,在開發過程中,應該如何有效避免csrf攻擊呢?

要回答這個問題,請參考:

**:宣告:本文的第四部分摘自:

跨站請求偽造 CSRF

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

CSRF跨站請求偽造

前面說到xss跨站指令碼攻擊,現在來個複雜度更高一點的csrf跨站請求偽造 首先說一下rsrf的幾個要點 1.rsrf是通過各種方法 站內發布鏈結,qq郵箱發布鏈結等 讓登入使用者觸發請求,在使用者不覺察的過程中對使用者資料進行篡改,進而實現攻擊 2.通過xss可以獲取到使用者的session id...

CSRF 跨站請求偽造

csrf cross site request forgery 中文是跨站請求偽造。csrf攻擊者在使用者已經登入目標 之後,誘使使用者訪問乙個攻擊頁面,利用目標 對使用者的信任,以使用者身份在攻擊頁面對目標 發起偽造使用者操作的請求,達到攻擊目的。舉個列子 假如a站為受信任的銀行 其中有個銀行轉賬...