SpringBoot如何使用mica-xss防止Xss攻擊
Xss攻擊介紹
XSS攻擊又稱 跨站腳本攻擊,通常指利用網(wǎng)頁(yè)開發(fā)時(shí)留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁(yè),使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁(yè)程序。
通俗的講就是通過web應(yīng)用可輸入?yún)?shù),輸入script腳本實(shí)現(xiàn)xss攻擊。
主要防御措施是通過web頁(yè)面關(guān)鍵字特殊字符過濾。
XSS攻擊的原理:攻擊者會(huì)在web頁(yè)面中插入一些惡意的script
代碼。
當(dāng)用戶瀏覽該頁(yè)面的時(shí)候,那么嵌套在該頁(yè)面的代碼就會(huì)執(zhí)行,因此會(huì)達(dá)到攻擊用戶的目的。
那根據(jù)這個(gè)原理,實(shí)際上如果沒有做任何的限制,有心人就可以為所欲為了。
可以在里面嵌入一些關(guān)鍵代碼,把你的信息拿走。確實(shí)是個(gè)很嚴(yán)重的問題。
需求概述
在常見的開發(fā)中需要注意xss跨站腳本的攻擊,需要對(duì)參數(shù)關(guān)鍵字做一些校驗(yàn)與過濾,避免將script腳本存入數(shù)據(jù)庫(kù)或者造成數(shù)據(jù)泄漏等安全問題。
實(shí)例
在前端form表單的輸入框中,用戶沒有正常輸入,而是輸入了一段代碼:
</input><img src=1 onerror=alert1>
這個(gè)正常保存沒有問題。
問題出在了列表查詢的時(shí)候,上面的代碼就生效了,由于圖片的地址亂寫的,所以這個(gè)alert就起作用了來看圖。
XSS攻擊分類
- 反射型 XSS:通過將XSS攻擊代碼放在請(qǐng)求URL上,將其作為輸入提交到服務(wù)器端。當(dāng)服務(wù)器端解析提交后,XSS代碼會(huì)隨著響應(yīng)內(nèi)容一起傳回瀏覽器,最后瀏覽器解析并執(zhí)行XSS代碼。由于整個(gè)過程像一個(gè)反射,因此稱為反射型XSS。如發(fā)起如下請(qǐng)求:https://www.域名.com/index.php?xss=<script>alter(xss攻擊)</script>。
- 存儲(chǔ)型 XSS:與反射型XSS“相似”,但不同的是提交的XSS代碼會(huì)被存儲(chǔ)在服務(wù)器端,當(dāng)下一次請(qǐng)求該頁(yè)面時(shí),不用提交XSS代碼,也會(huì)觸發(fā)XSS攻擊。例如當(dāng)進(jìn)行用戶注冊(cè)時(shí),用戶提交一條包含XSS代碼的注冊(cè)信息到服務(wù)器端,當(dāng)用戶查看個(gè)人信息時(shí)候,那些個(gè)人信息就會(huì)被瀏覽器當(dāng)成正常的HTML和JS解析執(zhí)行,從而觸發(fā)了XSS攻擊。
- DOM XSS:與反射型和存儲(chǔ)型XSS不同之處在于,DOM XSS不需要服務(wù)器的參與,通過瀏覽器的DOM解析即可觸發(fā)XSS攻擊,避免了服務(wù)器端的信息檢驗(yàn)和字符過濾。如發(fā)起如下請(qǐng)求:https://www.域名.com/index.html#alert(xss攻擊)
mica-xss
介紹
Mica,Spring Cloud 微服務(wù)開發(fā)核心包,支持 web 和 webflux。
mica-xss組件說明:
- 對(duì)表單綁定的字符串類型進(jìn)行 xss 處理。
- 對(duì) json 字符串?dāng)?shù)據(jù)進(jìn)行 xss 處理。
- 提供路由和控制器方法級(jí)別的放行規(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; } }
測(cè)試
參數(shù)為:<script>alert(666)</script>
設(shè)置XSS防護(hù)
去掉注解 @XssCleanIgnore ,則data的值為空字符串
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合RabbitMQ, 實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者的功能
這篇文章主要介紹了SpringBoot整合RabbitMQ, 實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者的功能,幫助大家更好得理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下2021-03-03SpringBoot 引?MybatisGenerator的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot 引?MybatisGenerator的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02Java設(shè)計(jì)模式七大原則之里氏替換原則詳解
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,里氏替換原則(Liskov Substitution principle)是對(duì)子類型的特別定義。本文將為大家詳細(xì)介紹Java設(shè)計(jì)模式七大原則之一的里氏替換原則,需要的可以參考一下2022-02-02Java對(duì)List進(jìn)行排序的方法總結(jié)
在Java中,對(duì)List進(jìn)行排序是一項(xiàng)常見的任務(wù),Java提供了多種方法來對(duì)List中的元素進(jìn)行排序,本文將詳細(xì)介紹如何使用Java來實(shí)現(xiàn)List的排序操作,涵蓋了常用的排序方法和技巧,需要的朋友可以參考下2024-07-07