功能介紹
CSRF一般指跨站請求偽造。跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法。針對發起CSRF攻擊進行防護。
背景信息
CSRF的攻擊場景
攻擊者盜用了用戶的身份,以用戶的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以受攻擊者名義發送郵件、發消息,盜取賬號,添加系統管理員,甚至于購買商品、虛擬貨幣轉賬等。
CSRF的攻擊原理
- 用戶User打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A。
- 在用戶信息通過驗證后,網站A產生Cookie信息并返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A。
- 用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B。
- 網站B接收到用戶請求后,返回一些攻擊性代碼,并發出一個請求要求訪問第三方站點A。
- 瀏覽器在接收到這些攻擊性代碼后,根據網站B 的請求,在用戶不知情的情況下攜帶Cookie 信息,向網站A 發出請求。網站A 并不知道該請求其實是由B 發起的,所以會根據用戶User 的Cookie 信息以User 的權限處理該請求,導致來自網站B 的惡意代碼被執行。
CSRF防護的方式
驗證碼
CSRF攻擊的過程,往往是在用戶不知情的情況下構造了網絡請求,驗證碼則強制用戶必須與應用進行交互才能完成最終請求。但基于使用體驗,網站不會給所有的操作都加上驗證碼。
驗證HTTP Referrer字段
根據 HTTP 協議,HTTP 頭部中Referrer字段記錄了該 HTTP 請求的來源地址。
比如一個論壇發帖的操作,在正常境況下需要先訪問有發帖功能的頁面,在提交發帖的表單時,Referrer值必然是發帖表單所在的頁面。如果Referrer的值不是這個頁面,甚至不是發帖網站的域,則極有可能是CSRF攻擊。
請求中添加token并驗證
在請求中放入黑客所不能偽造的信息,并且該信息不存在于Cookie 之中。可以在HTTP 請求中以參數的形式加入一個隨機產生的token,并在服務器端建立一個攔截器來驗證這個token,如果請求中沒有token 或者token 內容不正確,則認為可能是CSRF 攻擊而拒絕該請求。
前提條件
操作步驟
- 登錄。
- 在左側導航欄中選擇【安全能力】,進入【Web應用防火墻】菜單,并在左側域名列表選擇您要防護的域名。
- 進入防護能力-高級安全防護-【CSRF防護】詳細設置頁。
配置說明
配置項 說明 防護開關 將CSRF防護功能設置為關閉、攔截或告警。 可信任域名 當請求referrer中含該域名,則該請求放行(可填多個域名,默認一級本域名)默認域名可進行修改 防護配置
防護范圍:設置要檢測的請求范圍,支持正則匹配/字符串。支持配置多條防護粒度與防護范圍,多條防護粒度為且關系,多條防護范圍為或關系。URI:填寫等于/不等于防護的URI;METHOD:填寫等于/不等于的請求方法;PATH:填寫等于/不等于的PATH
合法referrer:填寫合法url,當請求referer精確匹配“合法referrer”,則該請求放行
無referrer:當請求沒有referrer這個字段時候的處理動作;跳轉,攔截,監控,放行(其中選擇跳轉后需要填跳轉目的地址,默認當前域名首頁)
不合法referrer時執行操作:當請求referer沒有在"可信任域名"、"合法referrer"中,該請求的處理動作,攔截,監控,放行(其中選擇跳轉后需要填跳轉目的地址,默認當前域名首頁)
注意:存在多條CSRF防護配置時,按照順序進行防護范圍的匹配,采用第一條命中防護范圍的策略;最多支持配置5條策略