SpringBoot 安全漏洞之XSS注入攻击(jsoup版本)
1. 跨站点脚本编制
风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
原因:未对用户输入正确执行危险字符清理。
固定值:查看危险字符注入的可能解决方案。
2. pom.xml添加依赖
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version>
</dependency>
3. 添加Xss包装类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;/*** Xss包装类* * @author zzg**/public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {public static final Logger log= LoggerFactory.getLogger(XssHttpServletRequestWrapper .class);/*** 构造请求对象* * @param request*/public XssHttpServletRequestWrapper(HttpServletRequest request) {super(request);}/*** 获取头部参数* * @param v 参数值*/@Overridepublic String getHeader(String v) {String header = super.getHeader(v);if (header == null || "".equals(header)) {return header;}return Jsoup.clean(super.getHeader(v), Whitelist.relaxed());}/*** 获取参数* * @param v 参数值*/@Overridepublic String getParameter(String v) {String param = super.getParameter(v);if (param == null || "".equals(param)) {return param;}return Jsoup.clean(super.getParameter(v), Whitelist.relaxed());}/*** 获取参数值* * @param v 参数值*/@Overridepublic String[] getParameterValues(String v) {String[] values = super.getParameterValues(v);if (values == null) {return values;}int length = values.length;String[] resultValues = new String[length];for (int i = 0; i < length; i++) {// 过滤特殊字符resultValues[i] = Jsoup.clean(values[i], Whitelist.relaxed()).trim();if (!(resultValues[i]).equals(values[i])) {log.debug("XSS过滤器 => 过滤前:{} => 过滤后:{}", values[i], resultValues[i]);}}return resultValues;}
}
4. 配置文件添加配置
security.xss.excludes=/login, /logout, /images/*, /jquery/*, /layui/*
5. 添加XSS过滤器
import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Value;/*** Xss过滤器* * @author zzg**/
@Component
@WebFilter(filterName = "XssFilter", urlPatterns = "/*")
public class XssFilter implements Filter {/*** 过滤器配置对象*/FilterConfig filterConfig = null;/*** 是否启用*/private boolean enable = true;/*** 忽略的URL*/@Value("${security.xss.excludes}")private String excludes;/*** 初始化*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;}/*** 拦截*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;// 不启用或者已忽略的URL不拦截if (!enable || isExcludeUrl(request.getServletPath())) {filterChain.doFilter(servletRequest, servletResponse);return;}XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(request);filterChain.doFilter(xssHttpServletRequestWrapper, servletResponse);}/*** 销毁*/@Overridepublic void destroy() {this.filterConfig = null;}/*** 判断是否为忽略的URL* * @param urlPath URL路径* @return true-忽略,false-过滤*/private boolean isExcludeUrl(String url) {if (excludes == null || excludes.isEmpty()) {return false;}List<String> urls = Arrays.asList(excludes.split(","));return urls .stream().map(pattern -> Pattern.compile("^" + pattern)).map(p -> p.matcher(url)).anyMatch(Matcher::find);}
}
SpringBoot 安全漏洞之XSS注入攻击(jsoup版本)相关推荐
- web漏洞利用---XSS注入攻击
XSS漏洞简介 XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所 ...
- crlf注入漏洞 java解决办法_HTTP响应拆分漏洞(CRLF注入攻击)解决办法
HTTP响应拆分漏洞(也叫CRLF注入攻击)解决办法.出现HTTP响应拆分漏洞的网站攻击者可能注入自定义HTTP头.例如,攻击者可以注入会话cookie或HTML代码.这可能会进行类似的XSS(跨站点 ...
- 漏洞解决方案-SQL注入攻击
漏洞解决方案-SQL注入攻击 前置知识 修复方案 代码参考 前置知识 SQL注入攻击,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. ...
- [风一样的创作]防XSS注入攻击
一.首先大概理解下什么是XSS注入攻击 XSS注入攻击本质上就是通过你服务本身的接口把一些HTML,CSS,JS,SQL语句等内容存储进你的服务里面,一般是数据库里面,这时候就可以通过这些存储进去的内 ...
- js基础笔记学习235解决xss注入攻击
- Cross-Site Scripting(XSS): 跨站脚本攻击介绍
一.XSS攻击简介 作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的. 在XSS攻击中,一般有三个角色参与:攻击者.目标服务器.受害者 ...
- SQL注入攻击再度肆虐殃及大量网站
据研究人员称,上周一个自动SQL注入攻击劫掠了超过70,000个美国网站,并顺带攻击了访问这些网站的大量PC机用户.通过Google可以很容易搜索到受攻击的网站,网页内容千差万别,包括教育网和政府网域 ...
- 3.7 命令注入攻击
1.命令注入攻击 概念:指由于开发人员缺少安全意识,在开发Web应用时未对用户提交的数据进行合规性检查,导致攻击者能够将命令作为普通用户数据提交给服务器执行 命令攻击形式有以下三种: 系统命令注入攻击 ...
- SQL注入攻击及其防范检测技术研究
2008-12-18 来自:51CTO 作者:陈小兵 本文简要介绍了SQL注入攻击的原理,SQL注入攻击实现过程,并在此基础上给出了一种SQL注入攻击的自动防范模型. 1 SQL注入攻击概述 1 ...
最新文章
- springboot RestTemplate httpclient
- Java enum枚举类型
- MDS 9148 配置
- 国庆佳节,我们有好礼相送!
- php中的一些编程例子
- FDQuery 怎么能插入NULL参数
- 计算字符串长度(英文占1个字符,中文汉字占2个字符)
- 机器学习中性能评估指标中的准确率(Accuracy)、召回率(Recall=TPR)、精确率(Precision)、误报率(FPR)、漏报率(FNR)及其关系
- 有关计算机知识的外文翻译,计算机专业外文翻译+原文-DBMS和MIS
- 生物信息学简史,A brief history of bioinformatics- Briefings in Bioinformatics综述解读
- 整数(奇偶)+分数分频器的verilog实现(大合集)
- Linux 系统不能正常关机解决办法
- 菜鸟Axios学习=官网
- 【ZBH选讲·拍照】
- 操作系统之虚拟化CPU(一)介绍
- oslo.messaging库
- 送给女朋友的3D立体动态相册的实现代码
- 点到点轨迹规划【1】——梯形速度曲线规划
- 远程视频监控之构思篇
- linux vnc 重启命令,vnc server配置、启动、重启与连接,图形管理linux系统