一、前言
2月份的1.2億條用户地址信息泄露再次給各大公司敲響了警鐘,數據安全的重要性愈加凸顯,這也更加堅定了我們推行安全測試常態化的決心。隨着測試組安全測試常態化的推進,有更多的同事對邏輯漏洞產生了興趣,本系列文章旨在揭秘邏輯漏洞的範圍、原理及預防措施,逐步提升大家的安全意識。第二篇選取了廣為熟知的CSRF漏洞進行介紹。
二、CSRF漏洞介紹
1、CSRF漏洞的定義
跨站請求偽造(Cross-site request forgery,簡稱CSRF),攻擊者利用受害者身份發起了HTTP請求,導致受害者在不知情的情況下進行了業務操作,如修改資料、提交訂單、發佈留言或評論等
2、CSRF主要攻擊形式
① GET類型的CSRF
這類攻擊非常簡單,只需要一個HTTP請求:<img src=””>
② POST類型的CSRF
這種類型的 CSRF 利用起來通常使用的是一個自動提交的表單,訪問問該頁面後,表單會自動提交,相當於模擬用户完成了一次 POST 操作。可見這種類型的 CSRF 與第一種一樣,都是模擬請求,所以後端接口也不能將安全寄託在僅允許 POST 請求上。
③ 鏈接類型的 CSRF
鏈接類型的CSRF並不常見,比起其他兩種用户打開頁面就中招的情況,這種類型需要用户點擊鏈接才會觸發,但本質上與前兩種一樣。這種類型通常是在論壇發佈的圖片中嵌入惡意鏈接,或者以廣告的形式誘導用户中招,攻擊者通常會以比較誇張的詞語誘騙用户點擊,例如: <a/>由於之前用户登錄了信任的網站A,並且保存登錄狀態,只要用户主動訪問這個頁面,則表示攻擊成功。
3、CSRF漏洞危害
CSRF漏洞可能導致在用户不知情的情況下進行業務操作:
① 修改資料
② 提交訂單
③ 發佈留言或評論(關鍵操作、增刪改)等
三、CSRF漏洞原理分析
四、CSRF漏洞實例分析
1、GET類型的CSRF
通過請求“http://1.116.45.67:82/vul/csrf/csrfget/csrf\_get\_edit.php?sex=%E5%A5%B3&phonenum=19898980000&add=%E5%8C%97%E4%BA%AC&email=555%40qq.com&submit=submit”即可修改用户郵箱
2、POST類型的CSRF
構造form表單類型的poc,請求addOrEdit接口新增字典成功。
五、CSRF漏洞防範意見
1、驗證請求的Referer值
如果Referer是以⾃⼰的⽹站開頭的域名,則説明該請求來⾃⽹站⾃⼰,是合法的。如果Referer是其他⽹站域名或空⽩,就有可能是CSRF攻擊,那麼服務器應拒絕該請求,但是此⽅法存在被繞過的可能。
2、請求中添加token並驗證
CSRF攻擊之所以能夠成功,是因為攻擊者可以偽造⽤户的請求,由此,抵禦CSRF攻擊的關鍵在於:在請求中放⼊攻擊者不能偽造的信息。例如可以在HTTP請求中以參數的形式加⼊⼀個隨機產⽣的token,並在服務器端驗證token,如果請求中沒有token或者token的內容不正確,則認為該請求可能是CSRF攻擊從⽽拒絕該請求。
六、CSRF常用構造內容
1、GET類型:
2、POST類型的CSRF
表單類型 POC構造:
JSON類型 POC構造:
作者:京東物流 範文君
來源:京東雲開發者社區 自猿其説Tech 轉載請註明來源