Springboot Xss注入过滤

news/2025/2/23 22:11:54
1.编写  XssHttpServletRequestWrapper

import
javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) { super(servletRequest); } public String[] getParameterValues(String parameter) { String[] values = super.getParameterValues(parameter); if (values==null) { return null; } int count = values.length; String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { encodedValues[i] = cleanXSS(values[i]); } return encodedValues; } /* 覆盖getParameter方法,将参数名和参数值都做xss过滤。 * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取 * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 */ public String getParameter(String parameter) { String value = super.getParameter(parameter); if (value == null) { return null; } return cleanXSS(value); } /** * 覆盖getHeader方法,将参数名和参数值都做xss过滤。 * 如果需要获得原始的值,则通过super.getHeaders(name)来获取 * getHeaderNames 也可能需要覆盖 */ public String getHeader(String name) { String value = super.getHeader(name); if (value == null) return null; return cleanXSS(value); } private String cleanXSS(String value) { //You'll need to remove the spaces from the html entities below value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); value = value.replaceAll("'", "& #39;"); value = value.replaceAll("eval\\((.*)\\)", ""); value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); value = value.replaceAll("script", ""); value = value.replaceAll("[*]","["+"*]"); value = value.replaceAll("[+]","["+"+]"); value = value.replaceAll("[?]","["+"?]"); // replace sql 这里可以自由发挥 String[] values = value.split(" "); String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|%|chr|mid|master|truncate|" + "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" + "table|from|grant|use|group_concat|column_name|" + "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|" + "chr|mid|master|truncate|char|declare|or|;|-|--|,|like|//|/|%|#"; String[] badStrs = badStr.split("\\|"); for (int i = 0;i<badStrs.length;i++){ for (int j = 0;j<values.length;j++){ if (values[j].equalsIgnoreCase(badStrs[i])){ values[j] = "forbid"; } } } StringBuilder sb = new StringBuilder(); for (int i = 0;i<values.length;i++){ if (i == values.length-1){ sb.append(values[i]); } else { sb.append(values[i]+" "); } } value = sb.toString(); return value; } }


2. XssFilter import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @WebFilter(urlPatterns = "/*") public class XssFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(XssFilter.class); FilterConfig filterConfig = null; @Override public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } @Override public void destroy() { this.filterConfig = null; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { logger.info("自定义过滤器->doFilter"); chain.doFilter(new XssHttpServletRequestWrapper( (HttpServletRequest) request), response); } }

3.在spring的启动类加注解  @SpringBootApplication @ServletComponentScan public class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); } }

 

转载于:https://www.cnblogs.com/ifindu-san/p/11008321.html


http://www.niftyadmin.cn/n/712049.html

相关文章

Linux下ntpdate时间同步

Linux下ntpdate时间同步Ntp服务器安装配置RedHat服务器可以下载rpm安装包&#xff0c;然后执行# rpm -ivh ntp-4.2.0.a.20040617-4.x86_64.rpm 或 # yum -y install ntp.x86_64时间同步方法同步命令# ntpdate ntp服务器域名或&#xff29;&#xff30;例如&#xff1a;# ntpda…

饮料自动售卖机编程_自动售卖机行业投资小,利润高

自动售卖机经营不需要办公室或很大的空间。但是需要考虑的空间问题就是为售货机选放置地点。所以从这点出发&#xff0c;此项投资不需要大量资金。你只需购买售货机里和出售的商品&#xff0c;投资金额风险非常小&#xff0c;利润却高达30%左右。只需从商家那里的便宜的商品意味…

[AI开发]目标跟踪之计数

基于视频结构化的应用中&#xff0c;目标在经过跟踪算法后&#xff0c;会得到一个唯一标识和它对应的运动轨迹&#xff0c;利用这两个数据我们可以做一些后续工作&#xff1a;测速&#xff08;交通类应用场景&#xff09;、计数&#xff08;交通类应用场景、安防类应用场景&…

java开发为啥要会linux,Java开发要会的Linux命令(一)

作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器上都是Linux系统.所以,要和服务器机器交互,就要通过shell命令.1、查找文件find . -name "*.xml" 递归查找所有的xml文件f…

搜索专题: HDU2102 A计划

这不知道是公主被抓走了第几次了&#xff0c;反正我们的骑士救就对了&#xff08;别说了&#xff0c;我都救我都救...&#xff09;;这次的迷宫有些特别&#xff0c;双层&#xff0c;带电梯&#xff08;&#xff1f;&#xff09;&#xff0c;而且这个电梯还有生命危险&#xff0…

MyBatis——谈谈占位符(#、$)的理解与使用

文章目录&#xff1a; 1.#占位符 1.1 #占位符的特点 1.2 使用 #{ } 对数据库执行 update 操作 2.$占位符 2.1 $占位符的特点 2.2 使用 ${ } 对数据库执行 select 操作 3.#{ }、${ } 占位符的综合使用 1.#占位符 1.1 #占位符的特点 MyBatis处理 #{ } 占位符&#x…

量化信噪比 非均匀量化_非均匀量化-Read.PPT

非均匀量化-Read03.11.20 第二章 数字通信技术-2 数字通信技术-1 主要内容 1、差错控制编码的基本思想。 2、PCM的三个基本过程。 3、抽样定理。 4、语音信号的抽样周期。 5、量化的基本思想。 6、均匀量化的弊端。 2.2.2 量化—非均匀量化 关于非均匀量化的主要内容&#xff1…

linux视频嗅探工具,Linux 5.13增加来自英特尔的KCPUID组件 帮助准确识别新推出的CPU...

原标题&#xff1a;Linux 5.13增加来自英特尔的KCPUID组件 帮助准确识别新推出的CPU 来源&#xff1a;cnBeta.COM今天上午&#xff0c;在新开放的Linux 5.13合并窗口的 "x86/misc "拉动请求中&#xff0c;增加了新的KCPUID实用工具。KCPUID是由英特尔添加到Linux内核…