1. 程式人生 > >說一說CSRF漏洞

說一說CSRF漏洞

CSRF漏洞(Cross-Site Request Forgery),是Web應用中常見的一種攻擊方法,存在被CSRF攻擊可能的站點,就存在CSRF漏洞。

先舉例說明

在一個論壇上,Alice發了一個帖子,Eve回覆了她的帖子,以下面的方式上傳了一張圖片:
Eve: Hello Alice! Look here:
<a href=“”><image src=“beauty”/></a>

我們看連結的地址,是將1000000 USD從Alice的帳戶轉到Eve的帳戶。
如果Alice點了上面圖片的連結,那麼連結的地址會被在瀏覽器中執行,如果瀏覽器中儲存了使用者登入的cookie且未過期,那麼連結就會被執行成功,結果就是Alice的1000000 USD被轉給Eve了。

當然,實際上銀行的網站不會這麼傻,這裡只是一個例子。

從例子中我們可以看出CSRF攻擊的主要特徵:

  1. 網站提供了有“副作用”的URL,所謂的“副作用”,是指會對使用者的利益,隱私造成影響的URL,比如例子中轉帳的URL。
  2. 瀏覽器的cookie儲存了使用者登入鑑權資訊。

所以,知道了CSRF的特徵之後,我們也可以知道如何防禦CSRF攻擊了,主要有下面幾個手段:

  1. 不提供有“副作用”的URL。
  2. 如果URL是通過表單(form)提交的,那麼在伺服器生成form時候,增加一個隨即數作為隱藏屬性,讓form提交的時候,檢查客戶端傳送的隨機數與伺服器的隨機數是否一致,如果不一致,那麼就拒絕請求。
  3. 檢查HTTP請求中的referrer header屬性,(referrer header是表示請求來源地址的,比如image請求的referrer header一般是HTML頁面),通過白名單的方式,檢查特定的referrer header地址才允許訪問。但是referrer header屬性涉及到使用者隱私問題,一般瀏覽器都提供了禁用referrer header屬性的功能。所以不推薦使用。