SpringBoot如何使用mica-xss防止Xss攻擊
Xss攻擊介紹
XSS攻擊又稱 跨站腳本攻擊,通常指利用網(wǎng)頁開發(fā)時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。
通俗的講就是通過web應(yīng)用可輸入?yún)?shù),輸入script腳本實現(xiàn)xss攻擊。
主要防御措施是通過web頁面關(guān)鍵字特殊字符過濾。
XSS攻擊的原理:攻擊者會在web頁面中插入一些惡意的script代碼。
當(dāng)用戶瀏覽該頁面的時候,那么嵌套在該頁面的代碼就會執(zhí)行,因此會達(dá)到攻擊用戶的目的。
那根據(jù)這個原理,實際上如果沒有做任何的限制,有心人就可以為所欲為了。
可以在里面嵌入一些關(guān)鍵代碼,把你的信息拿走。確實是個很嚴(yán)重的問題。

需求概述
在常見的開發(fā)中需要注意xss跨站腳本的攻擊,需要對參數(shù)關(guān)鍵字做一些校驗與過濾,避免將script腳本存入數(shù)據(jù)庫或者造成數(shù)據(jù)泄漏等安全問題。
實例
在前端form表單的輸入框中,用戶沒有正常輸入,而是輸入了一段代碼:
</input><img src=1 onerror=alert1>
這個正常保存沒有問題。
問題出在了列表查詢的時候,上面的代碼就生效了,由于圖片的地址亂寫的,所以這個alert就起作用了來看圖。

XSS攻擊分類
- 反射型 XSS:通過將XSS攻擊代碼放在請求URL上,將其作為輸入提交到服務(wù)器端。當(dāng)服務(wù)器端解析提交后,XSS代碼會隨著響應(yīng)內(nèi)容一起傳回瀏覽器,最后瀏覽器解析并執(zhí)行XSS代碼。由于整個過程像一個反射,因此稱為反射型XSS。如發(fā)起如下請求:https://www.域名.com/index.php?xss=<script>alter(xss攻擊)</script>。
- 存儲型 XSS:與反射型XSS“相似”,但不同的是提交的XSS代碼會被存儲在服務(wù)器端,當(dāng)下一次請求該頁面時,不用提交XSS代碼,也會觸發(fā)XSS攻擊。例如當(dāng)進(jìn)行用戶注冊時,用戶提交一條包含XSS代碼的注冊信息到服務(wù)器端,當(dāng)用戶查看個人信息時候,那些個人信息就會被瀏覽器當(dāng)成正常的HTML和JS解析執(zhí)行,從而觸發(fā)了XSS攻擊。
- DOM XSS:與反射型和存儲型XSS不同之處在于,DOM XSS不需要服務(wù)器的參與,通過瀏覽器的DOM解析即可觸發(fā)XSS攻擊,避免了服務(wù)器端的信息檢驗和字符過濾。如發(fā)起如下請求:https://www.域名.com/index.html#alert(xss攻擊)
mica-xss
介紹
Mica,Spring Cloud 微服務(wù)開發(fā)核心包,支持 web 和 webflux。
mica-xss組件說明:
- 對表單綁定的字符串類型進(jìn)行 xss 處理。
- 對 json 字符串?dāng)?shù)據(jù)進(jìn)行 xss 處理。
- 提供路由和控制器方法級別的放行規(guī)則。

導(dǎo)入依賴
<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>
mica-xss 配置

@XssCleanIgnore
添加注解@XssCleanIgnore跳過XSS過濾,該注解可作用于類上和方法上
import net.dreamlu.mica.xss.core.XssCleanIgnore;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
?
@RestController
@XssCleanIgnore //設(shè)置該注解 用于跳過配置的Xss 防護(hù)
@RequestMapping("/")
public class IndexController {
?
@GetMapping("/xss")
public String xssGet(String data){
System.out.println(data);
return data;
}
}測試
參數(shù)為:<script>alert(666)</script>

設(shè)置XSS防護(hù)
去掉注解 @XssCleanIgnore ,則data的值為空字符串
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
梳理總結(jié)Java?static關(guān)鍵字的方法作用
這篇文章主要介紹了梳理總結(jié)Java?static關(guān)鍵字的方法作用,?static?關(guān)鍵字可以用來修飾的成員變量和成員方法,被修飾的成員是屬于類的,而不是單單是屬于某個對象的2022-06-06
Java concurrency集合之ArrayBlockingQueue_動力節(jié)點(diǎn)Java學(xué)院整理
ArrayBlockingQueue是數(shù)組實現(xiàn)的線程安全的有界的阻塞隊列。下面通過本文給大家介紹Java concurrency集合之ArrayBlockingQueue的相關(guān)知識,感興趣的朋友一起看看吧2017-06-06
Java類的序列化版本唯一標(biāo)識符serialVersionUID使用
serialVersionUID是一個類的序列化版本唯一標(biāo)識符,用于確保在反序列化過程中類的實例與序列化文件中的類版本相匹配,它在版本兼容性和安全性方面起著關(guān)鍵作用2025-01-01
Spring中@Transactional注解關(guān)鍵屬性和用法小結(jié)
在Spring框架中,@Transactional 是一個注解,用于聲明事務(wù)性的方法,它提供了一種聲明式的事務(wù)管理方式,避免了在代碼中直接編寫事務(wù)管理相關(guān)的代碼,本文給大家介紹@Transactional 注解的一些關(guān)鍵屬性和用法,感興趣的朋友一起看看吧2023-12-12
SpringBoot集成支付寶沙箱支付的實現(xiàn)示例
本文主要介紹了SpringBoot集成支付寶沙箱支付的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解
這篇文章主要為大家介紹了RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

