最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot如何防止XSS注入攻擊詳解

 更新時(shí)間:2021年05月11日 14:31:47   作者:maybelence  
這篇文章主要給大家介紹了關(guān)于SpringBoot如何防止XSS注入攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是 XSS 攻擊

在跨站腳本(XSS)攻擊中,攻擊者可以在受害者的瀏覽器中執(zhí)行惡意腳本。這種攻擊通常是通過在網(wǎng)頁中插入惡意代碼 (JavaScript) 來完成的。攻擊者在使用攻擊后一般能夠:

  • 修改網(wǎng)頁內(nèi)容
  • 將用戶重定向到其他網(wǎng)站
  • 訪問用戶的 Cookie 并利用此信息來冒充用戶
  • 訪問有關(guān)用戶系統(tǒng)的關(guān)鍵信息,例如地理位置,網(wǎng)絡(luò)攝像頭,文件系統(tǒng)
  • 將木馬功能注入應(yīng)用程序

如果被攻擊的用戶在應(yīng)用程序中具有更高的權(quán)限。攻擊者可以完全控制應(yīng)用程序,并破壞所有用戶及其數(shù)據(jù)。

XSS 攻擊類型

常見的 XSS 攻擊主要有三種:存儲(chǔ)型 XSS 攻擊,反射型 XSS 攻擊和 DOM-based 型 XSS 攻擊。

  • 存儲(chǔ)型主要是將 XSS 代碼保存在服務(wù)端(數(shù)據(jù)庫、文件系統(tǒng)等),當(dāng)用戶以后再次請求該資源時(shí)重新解析該 XSS 代碼,從而出現(xiàn)攻擊。
  • 反射型主要發(fā)生在一個(gè)應(yīng)用程序使用動(dòng)態(tài)頁面向用戶顯示錯(cuò)誤消息時(shí),如果消息中注入了惡意代碼就會(huì)造成 XSS 反射型攻擊。
  • DOM-based 主要是通過腳本直接修改客戶端的 DOM 結(jié)構(gòu),一般這種都是屬于前端 JavaScript 的漏洞。

如何阻止 XSS 注入

下面是一個(gè)簡單的POST方法,模擬創(chuàng)建 Book 并將其保存到數(shù)據(jù)庫中。

@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    IBookService bookService;

    @PostMapping
    public void saveBook(@RequestBody Book book) {
        bookService.save(book);
    }
}

我們可以在保存的時(shí)候,對(duì) type 值做一段 js 注入,來模擬存儲(chǔ)型 XSS 攻擊。

現(xiàn)在我們來請求一下,這里的 JavaScript 只會(huì) alert 一個(gè)語句,但這種漏洞就有可能被別人利用來注入一些其他的惡意代碼:

X-XSS-Protection 響應(yīng)頭

一些瀏覽器內(nèi)置了對(duì)過濾反射型 XSS 攻擊的支持。在一定程度上有助于 XSS 保護(hù)。 我們需要在 HTTP 響應(yīng)頭添加如下內(nèi)容確保已啟用該功能,并指示瀏覽器在檢測到 XSS 攻擊時(shí)進(jìn)行阻止。

X-XSS-Protection: 1; mode=block

如果你的項(xiàng)目引入了 Spring Security ,那么默認(rèn)情況下就會(huì)自動(dòng)添加此標(biāo)頭。

添加Content-Security-Policy響應(yīng)標(biāo)頭

兼容 內(nèi)容安全策略 瀏覽器將僅執(zhí)行從我們的“允許”列出的域接收的源文件中加載的腳本,而忽略所有其他腳本,例如內(nèi)聯(lián)腳本。我們可以添加以下標(biāo)頭來啟用瀏覽器的內(nèi)容安全策略功能。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf().disable()//為了簡化示例并更清楚地說明XSS注入,此處禁用了CSRF保護(hù)。真實(shí)情況請勿使用。
                .authorizeRequests().anyRequest().authenticated()
                .and().httpBasic()
                .and()
                .headers().contentSecurityPolicy("script-src 'self'");
    }
}

以下是所有支持 CSP 的瀏覽器:

入?yún)Ⅱ?yàn)證

我們知道該字段僅需要中文英文和數(shù)字字符,因此我們可以使用 Spring 的 Validator 在字段中添加@Pattern注解。

    @NotNull
    @Pattern(message="種類只能支持中文英文數(shù)字", regexp = "[\u4e00-\u9fa5_a-zA-Z0-9]+")
    private String type;

然后將 @Valid 添加到接收 Book 的方法中,這樣當(dāng)發(fā)生請求時(shí)就會(huì)自動(dòng)驗(yàn)證:

@PostMapping
public void saveBook(@RequestBody @Valid Book book) {
    bookService.save(book);
}

客戶端

現(xiàn)在主流的幾種前端框架,像 Angular 、 React 、 Vue 也可以避免傳統(tǒng)開發(fā)可能帶來的問題:

  • 為了系統(tǒng)地阻止 XSS 錯(cuò)誤,默認(rèn)情況下,Angular 將所有值視為不可信。當(dāng)通過屬性,屬性,樣式,類綁定或插值將值從模板插入 DOM 時(shí),Angular 會(huì)清理并轉(zhuǎn)義不受信任的值。
  • 使用 JSX(React) 可以傳遞一個(gè)函數(shù)作為事件處理程序,而不是傳遞可能包含惡意代碼的字符串。
  • React 視圖中的字符串變量將自動(dòng)轉(zhuǎn)義。
  • Vue 的官方文檔也有說明, v-html 動(dòng)態(tài)的渲染任意 html 是十分危險(xiǎn)的,容易引發(fā) XSS 注入,所以 v-html 永遠(yuǎn)不要用于用戶提交的信息上。

總結(jié)

防止 XSS 漏洞主要涉及以下措施的組合:

  • 利用 X-XSS-Protection 響應(yīng)頭,利用瀏覽器的支持來限制反射的 XSS 攻擊。
  • 利用 Content-Security-Policy 響應(yīng)頭來啟用瀏覽器的 CSP 功能。
  • 使用 Validator 對(duì)輸入信息做相關(guān)校驗(yàn)。
  • 客戶端方面 React 使用 JSX 傳遞函數(shù)作為事件處理程序,Vue 只在可信內(nèi)容上使用 v-html ,對(duì)用戶輸入的信息,一定要禁止使用 v-html 。

到此這篇關(guān)于SpringBoot如何防止XSS注入攻擊的文章就介紹到這了,更多相關(guān)SpringBoot防止XSS注入攻擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中的引用類型之強(qiáng)軟弱虛詳解

    java中的引用類型之強(qiáng)軟弱虛詳解

    這篇文章主要給大家介紹了關(guān)于java中引用類型之強(qiáng)軟弱虛的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 解決idea中Springboot找不到BASE64Encoder或Decoder的jar包

    解決idea中Springboot找不到BASE64Encoder或Decoder的jar包

    這篇文章主要介紹了解決idea中Springboot找不到BASE64Encoder或Decoder的jar包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Boot整合Swagger測試api構(gòu)建全紀(jì)錄

    Spring Boot整合Swagger測試api構(gòu)建全紀(jì)錄

    這篇文章主要給大家介紹了關(guān)于Spring Boot整合Swagger測試api構(gòu)建的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 基于Spring Boot的Environment源碼理解實(shí)現(xiàn)分散配置詳解

    基于Spring Boot的Environment源碼理解實(shí)現(xiàn)分散配置詳解

    這篇文章主要給大家介紹了基于Spring Boot的Environment源碼理解實(shí)現(xiàn)分散配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Spring注入Bean的一些方式總結(jié)

    Spring注入Bean的一些方式總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Spring注入Bean的一些方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java實(shí)戰(zhàn)技巧之if-else代碼優(yōu)化技巧大全

    java實(shí)戰(zhàn)技巧之if-else代碼優(yōu)化技巧大全

    代碼中如果if-else比較多,閱讀起來比較困難,維護(hù)起來也比較困難,很容易出bug,下面這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)技巧之if-else代碼優(yōu)化技巧的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • springboot項(xiàng)目中mapper.xml文件找不到的三種解決方案

    springboot項(xiàng)目中mapper.xml文件找不到的三種解決方案

    這篇文章主要介紹了springboot項(xiàng)目中mapper.xml文件找不到的三種解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 簡單了解mybatis攔截器實(shí)現(xiàn)原理及實(shí)例

    簡單了解mybatis攔截器實(shí)現(xiàn)原理及實(shí)例

    這篇文章主要介紹了簡單了解mybatis攔截器實(shí)現(xiàn)原理及實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java傳值調(diào)用和傳引用調(diào)用方式(參數(shù)引用為null問題)

    Java傳值調(diào)用和傳引用調(diào)用方式(參數(shù)引用為null問題)

    這篇文章主要介紹了Java傳值調(diào)用和傳引用調(diào)用方式(參數(shù)引用為null問題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • springboot利用aop實(shí)現(xiàn)接口異步(進(jìn)度條)的全過程

    springboot利用aop實(shí)現(xiàn)接口異步(進(jìn)度條)的全過程

    我們在開發(fā)中,調(diào)用第三方接口時(shí),往往是提交數(shù)據(jù),要異步去獲取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot利用aop實(shí)現(xiàn)接口異步(進(jìn)度條)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01

最新評(píng)論

昭苏县| 吴江市| 凌海市| 尖扎县| 长泰县| 澄迈县| 许昌市| 灵宝市| 图们市| 枣阳市| 三台县| 太白县| 石林| 密山市| 婺源县| 和平县| 徐汇区| 汝州市| 大同县| 赫章县| 海林市| 迭部县| 武定县| 马山县| 松滋市| 阜南县| 万全县| 墨玉县| 崇明县| 涟源市| 安丘市| 富锦市| 卫辉市| 江油市| 祁连县| 靖江市| 阳山县| 日土县| 乐东| 合山市| 左权县|