跨站點請求偽造(CSRF)


一、前言

  跨站點請求偽造(Cross-SiteRequest Forgeries, CSRF),是指攻擊者通過設置好的陷阱,強制對已完成認證的用戶進行非預期的個人信息或設定信息等某些狀態更新,屬於被動攻擊;有如下危害:

  1、利用已通過認證的用戶權限更新設定信息;

  2、利用已通過認證的用戶權限購買商品,虛擬貨幣轉賬;

  3、利用已通過認證的用戶權限在留言板發表言論;

二、攻擊原理:

      第一步:驗證用戶訪問存在CSRF漏洞的網站A,網站A會給用戶返回cookie,以便后面可以免登陸;

      第二步:此時用戶在同一瀏覽器打開一個有而已攻擊代碼的網站B,網站B返回一些攻擊的代碼,這些代碼要求請求A網站;

      第三步:瀏覽器在接收到這些攻擊性代碼后,根據網站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據該驗證用戶的cookie信息以及權限處理該請求;

三、瀏覽器的cookie策略

     上面講到,網站B之所以能夠通過網站A的驗證,是因為B網站成功發送cookie的緣故。瀏覽器的cookie分為兩種,一種是臨時cookie,叫Seesion Cooie;另一種是'Third-party Cookie',也稱‘本地cookie’。兩者區別是在於,Third-party Cookie是服務器在Set-Cookie時指定的Expireid時間,只有到了Expire時間后Cookie才會失效,所以這種Cooki會保存在本地;而Session Cookie則沒有Expire時間,所以瀏覽器關閉后,Session Cookie就失效了。

  在瀏覽器的進程中,若是一個網站設置了Session Cookie,那么瀏覽器進程聲明周期中,即使瀏覽器打開了一個新的額tab頁,Session Cookie也都是有效的。Session Cookie保存在瀏覽器進程內存空間里面;而Third-party Cookie則保存在本地。

  如果瀏覽器從一個域的頁面中,要加載另外一個域的資源,由於安全考慮(p3p策略會有副作用,瀏覽器將不再攔截第三cookie的發送),某些瀏覽器會阻止Third-party Cookie的發送。

四、防御CSRF

  1、驗證 Referer check;

    檢查請求是否來自合法的‘源’,和‘防止圖片盜鏈’同理。但是不能保證每次服務器都能拿到referer字段,比如在https跳轉到http就不會發送referer;

  2、使用手機或郵件驗證碼;

  3、重要數據采用post請求,填寫表單驗證,但是破壞者可能會偽造form提交。

  4、Anti CDRF Token

    業界推崇這個方法。在請求中提添加一個token字段,如:www.hao123.com?name=abc&age=123&token=[random(seed)];token為客戶端和瀏覽器的秘密,其他人不知道。一般要保證token的保密性和隨機性。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM