本篇文章帶給大家的內容是關於CSRF是什麼? CSRF的危害以及防禦方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
什麼是 CSRF
在了解 CSRF 之前我們需要科普兩個前提。首先是登入權限驗證的方式有很多種,目前絕大多數網站採用的還是 session 會話任務的方式。 session 機制簡單的來說就是服務端使用一個鍵值對記錄登入訊息,同時在 cookie 中將 session id(即剛才說的鍵)儲存到 cookie 中。另外我們又知道瀏覽器中 HTTP(s) 請求是會自動幫我們把 cookie 帶上傳給服務端的。這樣在每次請求的時候透過 cookie 取得 session id,然後透過它在服務端取得登入資訊即可完成使用者權限的校驗。
本來這也是個不錯的功能。但是由於 cookie 實在是太開放了,如果一個使用者在 A 網站登入了,如果使用者在 B 網站造訪的時候發送了一個 A 網站的請求,那麼這個請求其實是帶有這個使用者在 A 網站的登入資訊的。如果這時候 B 站的 A 網站請求是用戶不知道的,那就是非常嚴重的危害了。以上的過程就是跨站請求攻擊,即 Cross-Site Request Forgery,即 CSRF。
CSRF 的危害
簡單總結CSRF 漏洞就是利用網站權限校驗方面的漏洞在用戶不知不覺的情況下發送請求,達到「偽裝」用戶的目的。攻擊者利用CSRF 實現的攻擊主要有以下幾種:
攻擊者能夠欺騙受害用戶完成該受害者所允許的任一狀態改變的操作,例如:更新帳號細節,完成購物,註銷甚至登入等操作
取得使用者的隱私資料
搭配其他漏洞攻擊
CSRF 蠕蟲
##其中 CSRF 蠕蟲如其名所指就是產生蠕蟲效果,會將 CSRF 攻擊一傳十,十傳百。如:某社區私訊好友的介面和獲取好友列表的介面都存在CSRF漏洞,攻擊者就可以將其組合成一個CSRF蠕蟲——當一個用戶訪問惡意頁面後通過CSRF獲取其好友列表信息,然後再利用私訊好友的CSRF漏洞給其每個好友發送一條指向惡意頁面的信息,只要有人查看這個信息裡的鏈接,CSRF蠕蟲就會不斷傳播下去,其可能造成的危害和影響非常巨大! 防禦方法從上文的描述我們可以知道 CSRF 有兩個特點:利用 cookie 自動攜帶的特性以及跨站攻擊。那麼針對這兩個特性可以使用以下解決方法。 檢查 Referer 字段大家都知道 HTTP 頭中有一個 Referer 字段,這個字段用以標明請求來源於哪個地址。透過在網站中校驗請求的該字段,我們能知道請求是否是從本站發出的。我們可以拒絕一切非本站發出的請求,這樣避免了 CSRF 的跨站特性。const { parse } = require('url');module.exports = class extends think.Logic { indexAction() { const referrer = this.ctx.referrer(); const {host: referrerHost} = parse(referrer); if(referrerHost !== 'xxx') { return this.fail('REFERRER_ERROR'); } }}
以上是CSRF是什麼? CSRF的危害以及防禦方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!