csrf防禦方法有:1、驗證HTTP Referer欄位;2、在請求位址中加入token並驗證;3、在HTTP頭中自訂屬性並驗證。 csrf是一種挾制用戶在目前已登入的網路應用程式上執行非本意的操作的攻擊方法。
csrf是一種挾位使用者在目前已登入的網路應用程式上執行非本意的操作的攻擊方法。
csrf防禦方法:
目前防禦CSRF 攻擊主要有三種策略:
1、驗證HTTP Referer 欄位;
2、在請求位址中新增token 並驗證;
3、在HTTP 頭中自訂屬性並驗證。
下面我們來具體說一下:
(1)驗證HTTP Referer 欄位
根據HTTP 協議,在HTTP 頭中有一個欄位叫Referer,它記錄了該HTTP 請求的來源位址。在通常情況下,存取安全受限頁面的請求來自於同一個網站。而如果駭客要對銀行網站實施 CSRF 攻擊,他只能在他自己的網站建構請求,當使用者透過駭客的網站發送請求到銀行時,該請求的 Referer 是指向駭客自己的網站。
因此,要防禦CSRF 攻擊,銀行網站只需要對於每一個轉帳請求驗證其Referer 值,如果是以bank.example 開頭的域名,則說明該請求是來自銀行網站自己的請求,是合法的。如果 Referer 是其他網站的話,則有可能是駭客的 CSRF 攻擊,拒絕該請求。
這種方法的顯而易見的好處就是簡單易行,網站的普通開發人員不需要操心CSRF 的漏洞,只需要在最後給所有安全敏感的請求統一增加一個攔截器來檢查Referer 的值就可以。特別是對於目前現有的系統,不需要改變目前系統的任何現有程式碼和邏輯,沒有風險,非常方便。
(2)在請求位址中新增token 並驗證
CSRF 攻擊之所以能夠成功,是因為駭客可以完全偽造使用者的請求,該請求中所有的使用者驗證資訊都是存在於cookie 中,因此駭客可以在不知道這些驗證資訊的情況下直接利用使用者自己的cookie 來通過安全驗證。
要抵禦 CSRF,關鍵在於在請求中放入駭客所不能偽造的訊息,並且該資訊不存在於 cookie 之中。可以在HTTP 請求中以參數的形式加入一個隨機產生的token,並在伺服器端建立一個攔截器來驗證這個token,如果請求中沒有token 或token 內容不正確,則認為可能是CSRF 攻擊而拒絕該請求。
(3)在HTTP 頭中自訂屬性並驗證
#這種方法也是使用token 並進行驗證,和上一個方法不同的是,這裡並不是把token 以參數的形式置於HTTP 請求之中,而是把它放到HTTP 頭中自訂的屬性裡。透過 XMLHttpRequest 這個類,可以一次給所有該類請求加上 csrftoken 這個 HTTP 頭屬性,並把 token 值放入其中。
這樣解決了上種方法在請求中加入token 的不便,同時,透過XMLHttpRequest 請求的位址不會被記錄到瀏覽器的位址欄,也不用擔心token 會透過Referer 洩漏到其他網站中去。
然而這種方法的限制非常大。 XMLHttpRequest 請求通常用於Ajax 方法中對於頁面局部的非同步刷新,並非所有的請求都適合用這個類別來發起,而且透過該類別請求得到的頁面不能被瀏覽器所記錄下,從而進行前進,後退,刷新,收藏等操作,造成使用者不便。
另外,對於沒有進行CSRF 防護的遺留系統來說,要採用這種方法來進行防護,要把所有請求都改為XMLHttpRequest 請求,這樣幾乎是要重寫整個網站,這代價無疑是不能接受的。
如果您想了解更多相關問題,可以存取php中文網。
以上是csrf防禦方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!