欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot XSS 攻擊過(guò)濾插件使用

 更新時(shí)間:2020年12月03日 09:49:56   作者:冷冷zz  
這篇文章主要介紹了Spring Boot XSS 攻擊過(guò)濾插件使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

XSS 是什么

XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,為了不與 CSS(Cascading Style Sheets)名詞混淆,故將跨站腳本攻擊簡(jiǎn)稱為 XSS,XSS 是一種常見(jiàn) web 安全漏洞,它允許惡意代碼植入到提供給其它用戶使用的頁(yè)面中。

xss 攻擊流程

簡(jiǎn)單 xss 攻擊示例若網(wǎng)站某個(gè)表單沒(méi)做相關(guān)的處理,用戶提交相關(guān)惡意代碼,瀏覽器會(huì)執(zhí)行相關(guān)的代碼。

解決方案

XSS 過(guò)濾說(shuō)明

  • 對(duì)表單綁定的字符串類型進(jìn)行 xss 處理。
  • 對(duì) json 字符串?dāng)?shù)據(jù)進(jìn)行 xss 處理。
  • 提供路由和控制器方法級(jí)別的放行規(guī)則。

使用 mica-xss

引入一下 依賴即可

<!--XSS 安全過(guò)濾-->
		<dependency>
			<groupId>net.dreamlu</groupId>
			<artifactId>mica-core</artifactId>
			<version>2.0.9-GA</version>
		</dependency>
		<dependency>
			<groupId>net.dreamlu</groupId>
			<artifactId>mica-xss</artifactId>
			<version>2.0.9-GA</version>
		</dependency>

測(cè)試 XSS 過(guò)濾

測(cè)試 GET 參數(shù)過(guò)濾創(chuàng)建目標(biāo)接口,模擬 get 提交

@GetMapping("/xss")
public String xss(String params){
 return params;
}

返回為空

⋊> ~ curl --location --request GET 'http://localhost:8080/xss?params=%3Cscript%3Ealert(%27xxx%27)%3C/script%3E'

測(cè)試 POST form 參數(shù)過(guò)濾創(chuàng)建目標(biāo)接口,模擬 post form 提交

@PostMapping("/xss")
public String xss(String params){
 return params;
}

返回為空

curl --location --request POST 'http://localhost:8080/xss' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'params=<script>alert('\''xxx'\'')</script>'

測(cè)試 POST body 參數(shù)過(guò)濾創(chuàng)建目標(biāo)接口,模擬 post body 提交

 @PostMapping("/xss")
  public String xss(@RequestBody Map<String,String> body){
    return body.get("params");
  }

返回為空

curl --location --request POST 'http://localhost:8080/xss' \
--header 'Content-Type: application/json' \
--data-raw '{
  "params":"<script>alert('\''XXX'\'')</script>"
}'

跳過(guò)某些接口過(guò)濾

可以使用 @XssCleanIgnore 注解對(duì)方法和類級(jí)別進(jìn)行忽略。

@XssCleanIgnore
@PostMapping("/xss")
public String xss(@RequestBody Map<String,String> body){
 return body.get("params");
}

原理分析

常見(jiàn)實(shí)現(xiàn)剖析

目前網(wǎng)上大多數(shù)的方案如下圖,新增 XssFilter 攔截用戶提交的參數(shù),進(jìn)行相關(guān)的轉(zhuǎn)義和黑名單排除,完成相關(guān)的業(yè)務(wù)邏輯。在整個(gè)過(guò)程中最核心的是通過(guò)包裝用戶的原始請(qǐng)求,創(chuàng)建新的 requestwrapper 保證請(qǐng)求流在后邊的流程可以重復(fù)讀。

mica-xss 實(shí)現(xiàn)

1. 自定義 WebDataBinder 編輯器支持 form 過(guò)濾

Spring WebDataBinder 的作用是從 web request 中把 web 請(qǐng)求里的parameters綁定到對(duì)應(yīng)的JavaBean上,在 Controller 方法中的參數(shù)類型可以是基本類型,也可以是封裝后的普通 Java 類型。若這個(gè)普通的 Java 類型沒(méi)有聲明任何注解,則意味著它的每一個(gè)屬性都需要到 Request 中去查找對(duì)應(yīng)的請(qǐng)求參數(shù),而 WebDataBinder 則可以幫助我們實(shí)現(xiàn)從 Request 中取出請(qǐng)求參數(shù)并綁定到 JavaBean 中。

SpringMVC 在綁定的過(guò)程中提供了用戶自定義編輯綁定的接口,注入即可在參數(shù)綁定 JavaBean 過(guò)程中執(zhí)行過(guò)濾。

2. 自定義 JsonDeserializer 反序列化支持 Json 過(guò)濾

在 Spring Boot 中默認(rèn)是使用 Jackson 進(jìn)行序列化和反序列化 JSON 數(shù)據(jù)的,那么除了可以用默認(rèn)的之外,我們也可以編寫(xiě)自己的 JsonSerializer 和 JsonDeserializer 類,來(lái)進(jìn)行自定義操作。用戶提交 JSON 報(bào)文會(huì)通過(guò) Jackson 的 JsonDeserializer 綁定到 JavaBean 中。我們只需要自定義 JsonDeserializer 即可完成在綁定 JavaBean 中執(zhí)行過(guò)濾。

核心過(guò)濾邏輯

在 mica-xss 中并未采取上文所述通過(guò)自己手寫(xiě)黑名單或者轉(zhuǎn)義方式的實(shí)現(xiàn)方案,而是直接實(shí)現(xiàn) Jsoup 這個(gè)工具類。

jsoup 實(shí)現(xiàn) WHATWG HTML5 規(guī)范,并將 HTML 解析為與現(xiàn)代瀏覽器相同的 DOM。

  • 從 URL,文件或字符串中刮取和解析 HTML
  • 使用 DOM 遍歷或 CSS 選擇器查找和提取數(shù)據(jù)
  • 操縱 HTML 元素,屬性和文本
  • 清除用戶提交的內(nèi)容以防止安全白名單,以防止 XSS 攻擊
  • 輸出整潔的 HTML

到此這篇關(guān)于Spring Boot XSS 攻擊過(guò)濾插件使用的文章就介紹到這了,更多相關(guān)Spring Boot XSS攻擊過(guò)濾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java CompletableFuture使用方式

    Java CompletableFuture使用方式

    這篇文章主要介紹了Java CompletableFuture使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring Boot非Web項(xiàng)目運(yùn)行的方法

    Spring Boot非Web項(xiàng)目運(yùn)行的方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot非Web項(xiàng)目運(yùn)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 解決IDEA鼠標(biāo)點(diǎn)擊光標(biāo)變大問(wèn)題

    解決IDEA鼠標(biāo)點(diǎn)擊光標(biāo)變大問(wèn)題

    這篇文章主要介紹了解決IDEA鼠標(biāo)點(diǎn)擊光標(biāo)變大問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 一文掌握J(rèn)ava的工具類和API

    一文掌握J(rèn)ava的工具類和API

    在Java中,工具類通常包含一系列靜態(tài)方法,用于執(zhí)行常見(jiàn)的任務(wù),這些任務(wù)可能不直接關(guān)聯(lián)到特定的業(yè)務(wù)邏輯,而是用于處理一些基礎(chǔ)的數(shù)據(jù)轉(zhuǎn)換、字符串操作、文件操作等,這篇文章主要介紹了一文搞懂Java的工具類和API,需要的朋友可以參考下
    2008-01-01
  • 配置Spring4.0注解Cache+Redis緩存的用法

    配置Spring4.0注解Cache+Redis緩存的用法

    本篇文章主要介紹了詳解配置Spring4.0注解Cache+Redis緩存的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringCloud中的Consul詳解

    SpringCloud中的Consul詳解

    這篇文章主要介紹了SpringCloud中的Consul知識(shí),本文使用的是docker-compose方式管理consul服務(wù),直接啟動(dòng)即可,需要的朋友可以參考下
    2022-03-03
  • mybatis-plus 判斷isnull or的操作

    mybatis-plus 判斷isnull or的操作

    這篇文章主要介紹了mybatis-plus 判斷isnull or的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • SpringBoot+Mybatis實(shí)現(xiàn)Mapper接口與Sql綁定幾種姿勢(shì)

    SpringBoot+Mybatis實(shí)現(xiàn)Mapper接口與Sql綁定幾種姿勢(shì)

    通常我們?cè)谑褂肕ybatis進(jìn)行開(kāi)發(fā)時(shí),會(huì)選擇xml文件來(lái)寫(xiě)對(duì)應(yīng)的sql,然后將Mapper接口與sql的xml文件建立綁定關(guān)系,然后在項(xiàng)目中調(diào)用mapper接口就可以執(zhí)行對(duì)應(yīng)的sql,感興趣的可以學(xué)習(xí)一下
    2021-09-09
  • java字符串常用操作方法(查找、截取、分割)

    java字符串常用操作方法(查找、截取、分割)

    今天小編就為大家分享一篇java字符串常用操作方法(查找、截取、分割),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java和Dubbo的SPI機(jī)制原理解析

    Java和Dubbo的SPI機(jī)制原理解析

    這篇文章主要介紹了Java和Dubbo的SPI機(jī)制原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論