跨站請求偽造(英語:Cross-site request forgery)
舉個栗子:用戶登錄的情況下,這時候,瀏覽器打開了黑客設計的頁面,頁面提供了一個帶有刪除操作的按鈕,按鈕的地址配的是我們系統的地址(抓包等手段獲取),用戶點擊了該按鈕,我們后台數據就真的刪了。
1、簡單的做法,就是通過 “數據加密 + token” 的方式,增加更多的校驗機制,讓我們的表單無法輕易復制。
(因為BS架構的特殊性,頁面源碼始終對外開放,想要攻擊仍然存在辦法,不過這已經不屬於CSRF漏洞,就不繼續深入討論了。)
2、檢查Referer字段,請求頭中有一個Referer字段,說明了請求的來源地址,但是這個字段是否有效,取決於瀏覽器的功能。
Security的默認做法:通過模版引擎,直接將token渲染到頁面上,token可以隱藏在頁面任意一個位置,每次提交表單,都要攜帶這個token。
提交表單的時候,token 如果設置在 request 的 header 中,header 字段名,需要通過 ${_csrf.headerName} 渲染。
提交表單的時候,token 如果設置在 request 的 parameter 中,parameter 字段名,需要通過 ${_csrf.parameterName} 渲染。
在開始試用Security的時候,為了方便通常會先禁用csrf,我們需要把這個功能啟用起來,取消注釋。
//啟用CSRF,放置CSRF攻擊 http.csrf().disable();
在登錄頁面的表單中加入token。其它頁面與登錄頁面類似,需要在表單中增加token字段,更簡單的做法,可以直接調整全局的ajax代碼切面。