anti-CSRF Token佈署時需要注意的一點問題

防範CSRF攻擊的方案有許多種,有用驗證碼來防的(tenfy:方案比較重,適合於敏感數據的變更類操作,對一般查詢信息類不是很合適),更多的是生成一個隨機的token,當用戶提交的時候,在服務器端比對一下token值是否正確,不正確就丟棄掉,正確就驗證通過。

     (因爲有些人喜歡鑽牛角尖,所以再次強調下,我們習慣於區分CSRFXSRF,後者是在XSS的情況下,防範CSRF和防範XSS是需要分開的兩套防禦方案)

      由於CSRF的防範原理是比對token,所以需要存在兩個token用來比對,其中一個,已經下發到用戶的返回頁面裏去了,而且是用戶提交請求時候的一個必須的參數。另外一個token,一般就存在於服務器的session中;當然這樣會造成依賴於session,使得在restful的架構環境下不好在不同服務期間拷貝session,所以,還有一種做法就是將token放到保存了完整session的cookie中。

      JJYY了這麼多,只是簡述了下anti-CSRF token的原理,在實際應用的時候,往往這個token是作爲一個hidden字段加在form表單裏的,或者是加在某些link裏。

      姑且不討論框架實現的問題,這個token最怕的就是泄露,XSS後之所以會讓這個方案失效的原因就在於XSS可以讀到這個token(tenfy:該token的部署應該是自己站點才能讀取和提交,第三方站點無法讀取和提交,否則該token第三方站點也可以僞造,那麼依賴該token的CSRF防範措施就會失效,所以token一般不能直接使用已有的cookie,因爲這樣的話,第三方站點進行提交請求發動CSRF攻擊,該cookie也會被瀏覽器自動帶給目標站點,token也不能顯示的寫在URL鏈接的地方並且是多次有效的,因爲這樣的話,第三方站點也可以直接拷貝該token後直接賦值到第三方站點的某個URL,通過誘導用戶打開某個鏈接而自動提交該token,但可以依賴某個salt,該salt存儲在cookie,如用戶登錄態key等,然後在自己站點動態執行腳本,對salt進行某種算法變換成一個token,並且該token通過腳本在自己站點提交的時候動態增加該參數進行提交,這樣只所以成功是因爲:對第三方站點,雖然發送CSRF請求瀏覽器會自動通過cookie帶salt過去目標站點,但第三方站點無法通過腳本讀取該cookie並進行按照某種算法轉換成token,另外一方面我們的token是動態在自己站點附加到提交操作的)

      所以我們在佈署CSRF token的時候,需要注意的一點,就是在一些頁面裏,需要慎重的加這個token,因爲可能會存在其他途徑,導致這個token的泄露

     正確的做法是,將anti-CSRF Token加到form裏,儘量減少加到link裏的時候,重要操作都用form來完成。特別需要注意的是那些展示頁面的url儘量不要加token.
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章