一 CSRF是什么?
跨站請求偽造(英語:Cross-site request forgery)令哟,也被稱為 one-click attack 或者 session riding,通撤劣迹縮寫為 CSRF 或者 XSRF屏富, 是一種挾制用戶在當前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。
二蛙卤、CSRF的原理
三狠半、CSRF的防范措施
1噩死、驗證 HTTP Referer 字段
HTTP頭中的Referer字段記錄了該 HTTP 請求的來源地址。在通常情況下神年,訪問一個安全受限頁面的請求來自于同一個網(wǎng)站已维,而如果黑客要對其實施 CSRF 攻擊,他一般只能在他自己的網(wǎng)站構(gòu)造請求已日。因此垛耳,可以通過驗證Referer值來防御CSRF 攻擊。
2飘千、驗證碼堂鲜。
驗證碼
利用驗證碼將用戶收到的信息與后臺服務(wù)器進行比對,每次用戶提交都需要用戶在表單中填寫一個圖片上的隨機字符串护奈,不符則進行拒絕泡嘴。
3、添加token驗證
CSRF攻擊之所以能夠成功逆济,是因為攻擊者可以完全偽造用戶的請求酌予,該請求中所有的用戶驗證信息都存在cookie中,因此攻擊者可以在不知道這些驗證信息的情況下直接利用用戶自己的cookie來通過安全驗證奖慌。要防止CSRF抛虫,關(guān)鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于cookie之中简僧〗ㄒ可以在HTTP請求中以參數(shù)的形式加入一個隨機產(chǎn)生的token,并在服務(wù)器建立一個攔截器來驗證這個token岛马,如果請求中沒有token或者token不正確棉姐,則認為可能是CSRF攻擊而拒絕該請求。
現(xiàn)在業(yè)界一致的做法就是使用Anti CSRF Token來防御CSRF啦逆。
用戶訪問某個表單頁面伞矩。
服務(wù)端生成一個Token,放在用戶的Session中夏志,或者瀏覽器的Cookie中乃坤。
在頁面表單附帶上Token參數(shù)。
用戶提交請求后沟蔑,服務(wù)端驗證表單中的Token是否與用戶Session(或Cookies)中的Token一致湿诊,一致為合法請求,不是則非法請求瘦材。
這個Token值必須是隨機的厅须,不可預(yù)測的。由于Token的存在食棕,攻擊者無法再構(gòu)造一個帶有合法Token的請求實施CSRF攻擊朗和。另外使用Token應(yīng)注意Token的保密性错沽,盡量把敏感操作由GET改成POST,以form或者AJAX形式提交例隆,避免Token泄露甥捺。
4、盡量使用POST镀层,限制GET
GET接口能夠直接將請求地址暴露給攻擊者镰禾,所以要防止CSRF一定最好不要用GET。當然POST并不是萬無一失唱逢,攻擊者只需要構(gòu)造一個form表單就可以吴侦,但需要在第三方頁面做,這樣就增加了暴露的可能性坞古。