日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式)

發布時間:2025/3/12 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XSS攻擊是什么

XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。

簡而言之,就是作惡用戶通過表單提交一些前端代碼,如果不做處理的話,這些前端代碼將會在展示的時候被瀏覽器執行。

如何避免XSS攻擊

解決XSS攻擊,可以通過后端對輸入的數據做過濾或者轉義,使XSS攻擊代碼失效。

代碼實現

對于過濾XSS腳本的代碼,通過搜索引擎可以搜索到很多,但似乎都不是那么全面。基本上都是只能過濾querystring(表單類型)類型的入參,而不能過濾json類型的入參。其實,在現在的開發中,更多的是使用json類型做數據交互。下面就直接貼代碼了:

新建XssAndSqlHttpServletRequestWrapper.java

import org.apache.commons.lang3.StringUtils;

import org.apache.commons.text.StringEscapeUtils;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

/**

* @author Happy

* 防止XSS攻擊

*/

public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrapper {

private HttpServletRequest request;

public XssAndSqlHttpServletRequestWrapper(HttpServletRequest request) {

super(request);

this.request = request;

}

@Override

public String getParameter(String name) {

String value = request.getParameter(name);

if (!StringUtils.isEmpty(value)) {

value = StringEscapeUtils.escapeHtml4(value);

}

return value;

}

@Override

public String[] getParameterValues(String name) {

String[] parameterValues = super.getParameterValues(name);

if (parameterValues == null) {

return null;

}

for (int i = 0; i < parameterValues.length; i++) {

String value = parameterValues[i];

parameterValues[i] = StringEscapeUtils.escapeHtml4(value);

}

return parameterValues;

}

}

這里重寫了兩個方法:getParameter和getParameterValues,getParameter方法是直接通過request獲得querystring類型的入參調用的方法。如果是通過springMVC注解類型來獲得參數的話,走的是getParameterValues的方法。大家可以通過打印一個輸出來驗證一下。

StringEscapeUtils.escapeHtml4這個方法來自Apache的工具類,maven坐標如下:

org.apache.commons

commons-text

1.4

新建XssFilter.java

過濾的代碼寫完了,下面就是在一個filter中應用該代碼。

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.module.SimpleModule;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Primary;

import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import org.springframework.stereotype.Component;

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import javax.servlet.http.HttpServletRequest;

import java.io.IOException;

/**

* @author Happy

*/

@WebFilter

@Component

public class XssFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

XssAndSqlHttpServletRequestWrapper xssRequestWrapper = new XssAndSqlHttpServletRequestWrapper(req);

chain.doFilter(xssRequestWrapper, response);

}

@Override

public void destroy() {

}

/**

* 過濾json類型的

* @param builder

* @return

*/

@Bean

@Primary

public ObjectMapper xssObjectMapper(Jackson2ObjectMapperBuilder builder) {

//解析器

ObjectMapper objectMapper = builder.createXmlMapper(false).build();

//注冊xss解析器

SimpleModule xssModule = new SimpleModule("XssStringJsonSerializer");

xssModule.addSerializer(new XssStringJsonSerializer());

objectMapper.registerModule(xssModule);

//返回

return objectMapper;

}

}

過濾表單類型的代碼已經完成(xssObjectMapper這個是后面過濾json類型才用到的)。下面來實現過濾json類型的代碼:

新建XssStringJsonSerializer.java

代碼如下:

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.databind.JsonSerializer;

import com.fasterxml.jackson.databind.SerializerProvider;

import org.apache.commons.text.StringEscapeUtils;

import java.io.IOException;

public class XssStringJsonSerializer extends JsonSerializer {

@Override

public Class handledType() {

return String.class;

}

@Override

public void serialize(String value, JsonGenerator jsonGenerator,

SerializerProvider serializerProvider) throws IOException {

if (value != null) {

String encodedValue = StringEscapeUtils.escapeHtml4(value);

jsonGenerator.writeString(encodedValue);

}

}

}

這里是通過修改SpringMVC的json序列化來達到過濾xss的目的的。其實也可以通過第一種方法,重寫getInputStream方法來實現,這里我就不做演示了(通過json類型傳參會走getInputStream方法,通過重寫該方法打印輸出可以證明)。

測試

TestController.java

import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

/**

* @author Happy

*/

@RestController

@RequestMapping(value = "/test")

public class TestController {

@PostMapping(value = "/xss")

public Object test(String name) {

System.out.println(name);

return name;

}

@PostMapping(value = "/json")

public Object testJSON(@RequestBody Param param) {

return param;

}

@GetMapping(value = "/query")

public Object testQuery(String q){

return q;

}

@PostMapping(value = "/upload")

public Object upload(MultipartFile file){

System.out.println(file.getOriginalFilename());

return "OK";

}

}

下面通過postman測試下效果:

可以看到,js代碼已經經過轉義。轉義過后的代碼,即使前端讀取過去了,也不會被瀏覽器執行的。

總結

以上是生活随笔為你收集整理的java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 哪里看毛片 | 性猛交富婆╳xxx乱大交麻豆 | 欧美激情二区三区 | 羞羞的网站在线观看 | jizz俄罗斯 | 免费精品视频在线 | 中国无码人妻丰满熟妇啪啪软件 | 久操亚洲 | 中文字幕在线观看视频免费 | 福利网址在线观看 | 久久羞羞 | 天堂中文在线视频 | 中出白浆| 中文字幕在线观看视频www | 久草视频在线资源 | 看av网| 亚洲av成人无码一区二区三区在线观看 | 麻豆三级在线观看 | 综合久久久久久久 | 国产又粗又猛又爽又黄av | 天天躁日日躁狠狠躁欧美 | 91成年人网站| 91抖音成人| 国模小黎自慰gogo人体 | 亚洲成人黄色在线观看 | 丝袜天堂 | 中文字幕免费在线看线人 | 亚洲涩综合 | 欧美乱码精品一区二区 | 人人爽人人干 | 欧美色图在线播放 | 精品国产九九 | 中文字幕有码无码人妻av蜜桃 | 调教一区二区三区 | 91在线精品入口 | 青草视频免费在线观看 | 亚州av网 | 一区二区三区免费高清视频 | 亚洲永久精品视频 | 在线艹| 欧美一级片一区 | 国产欧美激情在线观看 | 在线国产黄色 | 久久久精品久 | 综合网在线 | 免费观看一级黄色片 | 69视频网址 | 超碰xxx| 成人av免费 | 国产一区欧美一区 | 日韩区在线 | 毛片视频播放 | 女人18岁毛片 | zzji欧美大片 | 国产综合精品久久久久成人影 | 色婷婷伊人 | 午夜精品一区二区在线观看 | 一个人看的毛片 | 国产超碰91 | 国产精品综合一区二区 | 国内性爱视频 | 亚洲自拍中文字幕 | 一区二区三区高清在线观看 | 国产a黄| 久久综合干 | 天天操天天舔天天干 | 精品成人无码久久久久久 | 大陆av片 | 精品一区二区三区入口 | 国产原创在线观看 | av电影一区二区三区 | 91精品国产综合久久久蜜臀图片 | 中出在线播放 | 中文自拍| 就去吻亚洲 | 日韩 欧美 国产 综合 | 毛片无码一区二区三区a片视频 | 日韩黄色短片 | 深夜视频免费在线观看 | 国产99视频在线观看 | 四虎影视免费 | 日韩成人av片 | 欧美午夜精品久久久久久浪潮 | 私人毛片 | 中文字幕一区二区三区精华液 | 久久网伊人 | 国精产品一二三区精华液 | 色婷婷国产精品视频 | 桃色在线视频 | 国产精选久久 | 在线欧美日韩 | 国产精品人妻一区二区三区 | 国产视频一二三区 | 色涩综合 | 亚洲一区二区视频在线 | 日本αv | 亚洲国产精彩中文乱码av | 亚洲精品一区二区在线观看 | 国产精品久久久久久在线观看 |