中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringSecurity框架下如何實現CSRF跨站攻擊防御

發布時間:2021-09-27 15:38:59 來源:億速云 閱讀:153 作者:小新 欄目:編程語言

這篇文章主要介紹了SpringSecurity框架下如何實現CSRF跨站攻擊防御,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、什么是CSRF

很多朋友在學習Spring Security的時候,會將CORS(跨站資源共享)和CSRF(跨站請求偽造)弄混,以為二者是一回事。其實不是,先解釋一下:

CORS(跨站資源共享)是局部打破同源策略的限制,使在一定規則下HTTP請求可以突破瀏覽器限制,實現跨站訪問。

CSRF是一種網絡攻擊方式,也可以說是一種安全漏洞,這種安全漏洞在web開發中廣泛存在。

當我們使用Spring Security的時候,這種CSRF漏洞默認的被防御掉了。但是你會發現在跨域請求的情況下,我們的POST、DELETE、PUT等HTTP請求方式失效了。所以在筆者之前的文章中,我們使用http.csrf.disable()暫時關閉掉了CSRF的防御功能,但是這樣是不安全的,那么怎么樣才是正確的做法呢?就是本文需要向大家介紹的內容。

二、CSRF的攻擊方式

通常的CSRF攻擊方式如下:

你登錄了網站A,攻擊者向你的網站A賬戶發送留言、偽造嵌入頁面,帶有危險操作鏈接。

當你在登錄狀態下點擊了攻擊者的連接,因此該鏈接對你網站A的賬戶進行了操作。

這個操作是你在網站A中主動發出的,并且也是針對網站A的HTTP鏈接請求,同源策略無法限制該請求。

三、如何防御CSRF攻擊

為系統中的每一個連接請求加上一個token,這個token是隨機的,服務端對該token進行驗證。破壞者在留言或者偽造嵌入頁面的時候,無法預先判斷CSRF token的值是什么,所以當服務端校驗CSRF token的時候也就無法通過。所以這種方法在一定程度上是靠譜的。

但是如果你的電腦中毒,網絡信息被劫持使用token的方法仍然不安全。所以沒有絕對的安全,道高一次魔高一丈。作為開發者,我們就做到我們應該做到的。

跳轉提示:當用戶不小心點擊了第三方連接,合格的應用應該提示用戶相關的風險!由用戶自己確認是否真的要跳轉或者執行第三方連接,或者就干脆不讓非可信連接在留言區等地方存在。

四、Spring Security的CSRF token攻擊防護

首先,我們要先開啟防護功能,在用戶登陸操作之后,生成的CSRF Token就保存在cookies中。

public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception {  http.csrf()   .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())   .ignoringAntMatchers("/authentication");  .and()  ... }}

使用CookieCsrfTokenRepository生成CSRF Token放入cookie,并設置cookie的HttpOnly=false,允許js讀取該cookie。

使用ignoringAntMatchers開放一些不需要進行CSRF防護的訪問路徑,比如:登錄授權。

至此,我們生成了CSRF token保存在了cookies中,瀏覽器向服務端發送的HTTP請求,都要將CSRF token帶上,服務端校驗通過才能正確的響應。這個校驗的過程并不需要我們自己寫代碼實現,Spring Security會自動處理。但是我們需要關注前端代碼,如何正確的攜帶CSRF token。

五、前端請求攜帶CSRF Token的方式

在thymeleaf模板中可以使用如下方式,在發送HTTP請求的時候攜帶CSRF Token。如果是前后端分離的應用,或者其他模板引擎,酌情從cookies中獲取CSRF Toekn。

5.1.在Header中攜帶CSRF token

var headers = {};headers['X-CSRF-TOKEN'] = "${_csrf.token}";$.ajax({  headers: headers, });

5.2.直接作為參數提交。

$.ajax({  data: {    "_csrf": "${_csrf.token}"   }});

5.3.form表單的隱藏字段

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">

感謝你能夠認真閱讀完這篇文章,希望小編分享的“SpringSecurity框架下如何實現CSRF跨站攻擊防御”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沅江市| 武隆县| 大宁县| 盐城市| 增城市| 天门市| 阳江市| 青铜峡市| 全州县| 莱西市| 三都| 会同县| 寻甸| 乐安县| 齐齐哈尔市| 常德市| 宽甸| 嵊泗县| 南宁市| 舟曲县| 正镶白旗| 高青县| 伊川县| 汕头市| 仁怀市| 大方县| 商南县| 青铜峡市| 关岭| 湟中县| 资阳市| 新宁县| 博罗县| 洪洞县| 吉隆县| 宜州市| 牡丹江市| 乌兰察布市| 西丰县| 甘孜县| 额尔古纳市|