跨站点脚本编制 - SpringBoot配置XSS过滤器(基于mica-xss)
1. 简介
XSS,即跨站脚本编制,英文为Cross Site Scripting。为了和CSS区分,命名为XSS。
XSS是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
2. XSS相关博客
跨站点脚本编制 - SpringBoot配置XSS过滤器(基于Jsoup)
3. 其他安全相关博客
SQL盲注、SQL注入 - SpringBoot配置SQL注入过滤器
跨站点请求伪造 - SpringBoot配置CSRF过滤器
4. 基于mica-xss解决
参考:https://gitee.com/596392912/mica
- pom.xml添加依赖
<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>
添加依赖后,已经完成了XSS过滤配置。
5. 测试
- 编写测试Controller
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 用户Controller
*
* @author CL
*
*/
@RestController
@RequestMapping(value = "user")
public class UserController {
/**
* 获取用户信息
*
* @param user 用户Entity
* @return
*/
@RequestMapping(value = "get")
public String get(User user) {
return user.toString();
}
}
/**
* 用户Entity
*
* @author CL
*
*/
class User {
/**
* 用户ID
*/
private String id;
/**
* 用户名称
*/
private String username;
public User() {
super();
}
public User(String id, String username) {
super();
this.id = id;
this.username = username;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + "]";
}
}
- 跳过过滤
在Controller上添加注解@XssCleanIgnore即可。
/**
* 注册Controller
*
* @author CL
*
*/
@XssCleanIgnore
@RestController
@RequestMapping(value = "register")
public class RegisterController {
/**
* 获取信息
*
* @param username 用户名称
* @return
*/
@RequestMapping(value = "get")
public String get(String username) {
return username;
}
}
- Postman测试


6. mica-xss原理
- 自定义WebDataBinder过滤Form表单
WebDataBinder的作用是从request将请求中的parameters绑定到对应的JavaBean上,在Controller方法中的参数类型可以是基本类型,也可以是普通Java类型。SpringMVC提供了在绑定的过程中用户自定义编辑绑定的接口,因此可以在绑定过程中进行过滤。
/**
* 表单 xss 处理
*
* @author L.cm
*/
@AutoIgnore
@ControllerAdvice
@RequiredArgsConstructor
public class FormXssClean {
private final XssCleaner xssCleaner;
@InitBinder
public void initBinder(WebDataBinder binder) {
// 处理前端传来的表单字符串
binder.registerCustomEditor(String.class, new StringPropertiesEditor(xssCleaner));
}
//......
}
- 自定义JsonDeserializer(反序列化)过滤Json
SpringBoot中默认是使用Jackson对Json数据进行序列化和反序列化,也可以自定义JsonSerializer和JsonDeserializer类自主实现。用户提交的Json报文会通过JsonDeserializer绑定到Java Bean中。因此可以在JsonDeserializer中进行过滤。
/**
* jackson xss 处理
*
* @author L.cm
*/
@Slf4j
@RequiredArgsConstructor
public class JacksonXssClean extends JsonDeserializer<String> {
private final XssCleaner xssCleaner;
@Override
public String deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
// XSS filter
String text = p.getValueAsString();
if (text == null) {
return null;
} else if (XssHolder.isEnabled()) {
String value = xssCleaner.clean(text);
log.debug("Json property value:{} cleaned up by mica-xss, current value is:{}.", text, value);
return value;
} else {
return text;
}
}
}
- XssUtil
mica-xss的XSS工具类其实也是基于Jsoup工具实现的。
/**
* xss clean
*
* <p>
* 参考自 jpress:https://gitee.com/fuhai/jpress
* </p>
*
* @author L.cm
* @author michael
*/
public class XssUtil {
private static final HtmlWhitelist WHITE_LIST = new HtmlWhitelist();
/**
* xss 清理
*
* @param html html
* @return 清理后的 html
*/
public static String clean(String html) {
if (StringUtils.hasText(html)) {
return Jsoup.clean(html, WHITE_LIST);
}
return html;
}
//......
}
7. mica.xss配置
mica-xss提供的配置类如下:
/**
* Xss配置类
*
* @author L.cm
*/
@Getter
@Setter
@ConfigurationProperties("mica.xss")
public class MicaXssProperties {
/**
* 开启xss
*/
private boolean enabled = true;
/**
* 拦截的路由,默认为空
*/
private List<String> pathPatterns = new ArrayList<>();
/**
* 放行的规则,默认为空
*/
private List<String> excludePatterns = new ArrayList<>();
}
可以看出,默认是开启XSS过滤的,我们可以通过application配置文件,来开启或关闭过滤,并指定相应的拦截路由(默认为全部:/**)和放行规则(默认为空)。
如果默认的配置已经满足需求,则不需要再自定义配置mica.xss。
mica:
xss:
enabled: true
excludePatterns:
- /login
- /logout
跨站点脚本编制 - SpringBoot配置XSS过滤器(基于mica-xss)的更多相关文章
- 跨站点脚本编制 - SpringBoot配置XSS过滤器(基于Jsoup)
1. 跨站点脚本编制 风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务. 原因:未对用户输入正确执行危险字符清 ...
- 跨站点请求伪造 - SpringBoot配置CSRF过滤器
1. 跨站点请求伪造 风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务. 原因:应用程序使用的认证方法不充分. ...
- 使用过滤器解决SQL注入和跨站点脚本编制
1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...
- 跨站点脚本编制-XSS 描述及解决方法
跨站点脚本编制可能是一个危险的安全性问题,在设计安全的基于 Web 的应用程序时应该考虑这一点.本文中,描述了这种问题的本质.它是如何起作用的,并概述了一些推荐的修正策略. 当今的大多数网站都对 We ...
- 跨站点脚本编制实例(AppScan扫描结果)
最近工作要求解决下web的项目的漏洞问题,扫描漏洞是用的AppScan工具,其中有很多是关于跨站点脚本编制问题的.下面就把这块东西分享出来. 原创文章,转载请注明 ------------------ ...
- js解决跨站点脚本编制问题
1.前台处理(容易绕过): <script type="text/javascript"> $(document).ready(function(){ var url= ...
- 【漏洞三】跨站点脚本(XSS)攻击
[漏洞] 跨站点脚本(XSS)攻击 [原因] 跨站点脚本(也称为xss)是一个漏洞,攻击者可以发送恶意代码(通常在(Javascript的形式)给另一个用户.因为浏览器无法知道脚本是否值得信任,所以它 ...
- ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...
- 跨站点脚本攻击XSS
来源:http://www.freebuf.com/articles/web/15188.html 跨站点脚本攻击是一种Web应用程序的攻击,攻击者尝试注入恶意脚本代码到受信任的网站上执行恶意操作.在 ...
随机推荐
- 说说基于网络的五种IO模型
# django不是一个异步框架 # tornado是异步的web框架 # 处理每秒大量的请求 # 个人理解的IO:就是应用层与内核驱动层的交互,这个过程无论从应用层到内核中,还是驱动层等待硬件层的数 ...
- a^b(取模运算)
a^b(sdtbu oj 1222) Description 对于任意两个正整数a,b(0 <= a, b < 10000)计算ab各位数字的和的各位数字的和的各位数字的和的各位数字的和. ...
- IntelliJ IDEA 2020.2.3永久破解激活教程 - 2020.10.27
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除 不花钱 的方式 IDEA 2020.2 激活到 2089 年 注意:教程适 ...
- 来看看面试必问的HashMap,一次彻底帮你搞定HashMap源码
HashMap结构 数组+链表+红黑树 链表大于8转红黑树,红黑树节点数小于6退回链表. 存放的key-value的Node节点 static class Node<K,V> implem ...
- FL Studio中的音频剪辑功能
音频剪辑是FL Studio中的特色功能,音频剪辑的目的是保持在播放列表中显示和触发的音频,可以根据需要对它们进行切片和排列.但音频剪辑这个功能在FL Studio的基础版中是没有的. 图1:音频剪辑 ...
- 【CF983C】elevator——记忆化搜索
(题面来自luogu) 题意翻译 题意 一个9层的楼有一个可以容纳4个人的电梯,你要管理这个电梯. 现在各层楼上有一些在排队的人,你知道他们在哪层要到哪层去.你也知道到电梯门口的顺序.根据公司的规定, ...
- 跨域共享CORS详解及Gin配置跨域
跨域简介 当两个域具有相同的协议(如http), 相同的端口(如80),相同的host,那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同). 跨域就指着协议,域名,端口不一致,出于安全考虑 ...
- day99:MoFang:Flask-JSONRPC提供RPC接口&在APP进行窗口页面操作(窗口-帧-帧组)
目录 1.服务端基于Flask-JSONRPC提供RPC接口 1.Flask-JSONRPC简介 2.安装Flask-JSONRPC模块 3.快速实现一个测试的RPC接口 4.移动端访问测试接口 2. ...
- CSP2020复赛游记
CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...
- [从源码学设计]蚂蚁金服SOFARegistry之消息总线异步处理
[从源码学设计]蚂蚁金服SOFARegistry之消息总线异步处理 目录 [从源码学设计]蚂蚁金服SOFARegistry之消息总线异步处理 0x00 摘要 0x01 为何分离 0x02 业务领域 2 ...