亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringSecurity框架下實(shí)現(xiàn)CSRF跨站攻擊防御的方法

 更新時(shí)間:2019年12月11日 10:26:31   作者:字母哥博客  
CSRF是一種網(wǎng)絡(luò)攻擊方式,也可以說是一種安全漏洞,這種安全漏洞在web開發(fā)中廣泛存在。這篇文章主要介紹了SpringSecurity框架下實(shí)現(xiàn)CSRF跨站攻擊防御,需要的朋友可以參考下

一、什么是CSRF

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

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

CSRF是一種網(wǎng)絡(luò)攻擊方式,也可以說是一種安全漏洞,這種安全漏洞在web開發(fā)中廣泛存在。

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

二、CSRF的攻擊方式

通常的CSRF攻擊方式如下:

你登錄了網(wǎng)站A,攻擊者向你的網(wǎng)站A賬戶發(fā)送留言、偽造嵌入頁(yè)面,帶有危險(xiǎn)操作鏈接。

當(dāng)你在登錄狀態(tài)下點(diǎn)擊了攻擊者的連接,因此該鏈接對(duì)你網(wǎng)站A的賬戶進(jìn)行了操作。

這個(gè)操作是你在網(wǎng)站A中主動(dòng)發(fā)出的,并且也是針對(duì)網(wǎng)站A的HTTP鏈接請(qǐng)求,同源策略無法限制該請(qǐng)求。

三、如何防御CSRF攻擊

為系統(tǒng)中的每一個(gè)連接請(qǐng)求加上一個(gè)token,這個(gè)token是隨機(jī)的,服務(wù)端對(duì)該token進(jìn)行驗(yàn)證。破壞者在留言或者偽造嵌入頁(yè)面的時(shí)候,無法預(yù)先判斷CSRF token的值是什么,所以當(dāng)服務(wù)端校驗(yàn)CSRF token的時(shí)候也就無法通過。所以這種方法在一定程度上是靠譜的。

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

跳轉(zhuǎn)提示:當(dāng)用戶不小心點(diǎn)擊了第三方連接,合格的應(yīng)用應(yīng)該提示用戶相關(guān)的風(fēng)險(xiǎn)!由用戶自己確認(rèn)是否真的要跳轉(zhuǎn)或者執(zhí)行第三方連接,或者就干脆不讓非可信連接在留言區(qū)等地方存在。

四、Spring Security的CSRF token攻擊防護(hù)

首先,我們要先開啟防護(hù)功能,在用戶登陸操作之后,生成的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,并設(shè)置cookie的HttpOnly=false,允許js讀取該cookie。

使用ignoringAntMatchers開放一些不需要進(jìn)行CSRF防護(hù)的訪問路徑,比如:登錄授權(quán)。

至此,我們生成了CSRF token保存在了cookies中,瀏覽器向服務(wù)端發(fā)送的HTTP請(qǐng)求,都要將CSRF token帶上,服務(wù)端校驗(yàn)通過才能正確的響應(yīng)。這個(gè)校驗(yàn)的過程并不需要我們自己寫代碼實(shí)現(xiàn),Spring Security會(huì)自動(dòng)處理。但是我們需要關(guān)注前端代碼,如何正確的攜帶CSRF token。

五、前端請(qǐng)求攜帶CSRF Token的方式

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

5.1.在Header中攜帶CSRF token

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

5.2.直接作為參數(shù)提交。

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

5.3.form表單的隱藏字段

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

總結(jié)

以上所述是小編給大家介紹的SpringSecurity框架下實(shí)現(xiàn)CSRF跨站攻擊防御,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • IDEA快速搭建Java開發(fā)環(huán)境的教程圖解

    IDEA快速搭建Java開發(fā)環(huán)境的教程圖解

    這篇文章主要介紹了IDEA如何快速搭建Java開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Druid關(guān)閉監(jiān)控頁(yè)面關(guān)閉不了的問題及解決

    Druid關(guān)閉監(jiān)控頁(yè)面關(guān)閉不了的問題及解決

    這篇文章主要介紹了Druid關(guān)閉監(jiān)控頁(yè)面關(guān)閉不了的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java?C++題解leetcode817鏈表組件示例

    Java?C++題解leetcode817鏈表組件示例

    這篇文章主要為大家介紹了Java?C++題解leetcode817鏈表組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java通過正則表達(dá)式捕獲組中的文本

    Java通過正則表達(dá)式捕獲組中的文本

    這篇文章主要給大家介紹了關(guān)于利用Java如何通過正則表達(dá)式捕獲組中文本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧下
    2019-09-09
  • JMeter導(dǎo)入自定義的Jar包的詳解教程

    JMeter導(dǎo)入自定義的Jar包的詳解教程

    這篇文章主要介紹了JMeter導(dǎo)入自定義的Jar包的詳解教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解使用MyBatis Generator自動(dòng)創(chuàng)建代碼

    詳解使用MyBatis Generator自動(dòng)創(chuàng)建代碼

    這篇文章主要介紹了使用MyBatis Generator自動(dòng)創(chuàng)建代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java實(shí)現(xiàn)的猴子吃桃問題算法示例

    Java實(shí)現(xiàn)的猴子吃桃問題算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的猴子吃桃問題算法,簡(jiǎn)單描述了猴子吃桃問題并結(jié)合實(shí)例形式給出了java解決猴子吃桃問題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • 基于Java回顧之反射的使用分析

    基于Java回顧之反射的使用分析

    本篇文章是對(duì)Java反射的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • IDEA編寫JavaWeb出現(xiàn)亂碼問題解決方案

    IDEA編寫JavaWeb出現(xiàn)亂碼問題解決方案

    這篇文章主要介紹了IDEA編寫JavaWeb出現(xiàn)亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java Condition類案例詳解

    Java Condition類案例詳解

    這篇文章主要介紹了Java Condition類案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論