csrf(cross-site request forgery)也被稱為 one-click attack或者 session riding,中文全稱是叫跨站請求偽造。
一般來說,攻擊者通過偽造使用者的瀏覽器的請求,向訪問乙個使用者自己曾經認證訪問過的**傳送出去,使目標**接收並誤以為是使用者的真實操作而去執行命令。常用於盜取賬號、轉賬、傳送虛假訊息等。攻擊者利用**對請求的驗證漏洞而實現這樣的攻擊行為,**能夠確認請求**於使用者的瀏覽器,卻不能驗證請求是否源於使用者的真實意願下的操作行為。
http頭中的referer欄位記錄了該 http 請求的**位址。在通常情況下,訪問乙個安全受限頁面的請求來自於同乙個**,而如果黑客要對其實施 csrf攻擊,他一般只能在他自己的**構造請求。因此,可以通過驗證referer值來防禦csrf 攻擊。
關鍵操作頁面加上驗證碼,後台收到請求後通過判斷驗證碼可以防禦csrf。但這種方法對使用者不太友好。
csrf 攻擊之所以能夠成功,是因為黑客可以完全偽造使用者的請求,該請求中所有的使用者驗證資訊都是存在於cookie中,因此黑客可以在不知道這些驗證資訊的情況下直接利用使用者自己的cookie 來通過安全驗證。要抵禦 csrf,關鍵在於在請求中放入黑客所不能偽造的資訊,並且該資訊不存在於 cookie 之中。可以在 http 請求中以引數的形式加入乙個隨機產生的 token,並在伺服器端建立乙個***來驗證這個 token,如果請求中沒有token或者 token 內容不正確,則認為可能是 csrf 攻擊而拒絕該請求。這種方法要比檢查 referer 要安全一些,token 可以在使用者登陸後產生並放於session之中,然後在每次請求時把token 從 session 中拿出,與請求中的 token 進行比對,但這種方法的難點在於如何把 token 以引數的形式加入請求。對於 get 請求,token 將附在請求位址之後,這樣 url 就變成 http://url?csrftoken=tokenvalue。
而對於 post 請求來說,要在 form 的最後加上 ,這樣就把token以引數的形式加入請求了。
這種方法也是使用 token 並進行驗證,和上一種方法不同的是,這裡並不是把 token 以引數的形式置於 http 請求之中,而是把它放到 http 頭中自定義的屬性裡。通過 xmlhttprequest 這個類,可以一次性給所有該類請求加上 csrftoken 這個 http 頭屬性,並把 token 值放入其中。這樣解決了上種方法在請求中加入 token 的不便,同時,通過 xmlhttprequest 請求的位址不會被記錄到瀏覽器的位址列,也不用擔心 token 會透過 referer 洩露到其他**中去。
csrf攻擊及其防範介紹
csrf cross site request forgery 跨站請求偽造 亦稱為 one click attack session riding,縮寫為 csrf xsrf。csrf,首先要獲取站點使用者登入資訊,然後冒充正常使用者登入,進行破壞活動,受害方為正常使用者和站點。攻擊型別 顯示攻擊...
如何預防 CSRF 攻擊?
user02 攻擊者 清楚地了解 a,並建立了具有攻擊性的 b。user01 受害者 登入了 a 後,在自身的 session 未失效的情況下,訪問了惡意 b。假如,user01 還未退出 a,在同一瀏覽器中,訪問了惡意 b。b 是 user02 建立的,user02 清楚地知道 a 的工作模式。b...
CSRF 攻擊的原理和防範措施
使用者c訪問正常 a時進行登入,瀏覽器儲存a的cookie 而攻擊 b在訪問 a的時候,瀏覽器會自動帶上 a的cookie 所以 a在接收到請求之後可判斷當前使用者是登入狀態,所以根據使用者的許可權做具體的操作邏輯,造成 攻擊成功 在指定表單或者請求頭的裡面新增乙個隨機值做為引數 在響應的cooki...