1.web.xml新增filter配置

  1. <!-- URL请求参数字符过滤或合法性校验 -->
  2. <filter>
  3. <filter-name>XssFilter</filter-name>
  4. <filter-class>com.isoftstone.ifa.web.base.filter.XssFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>XssFilter</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. <dispatcher>REQUEST</dispatcher>
  10. <dispatcher>FORWARD</dispatcher>
  11. </filter-mapping>

filter

2.新增com.isoftstone.ifa.web.base.filter.XssFilter     XssFilter.class类,(注:路径要正确)

  1. package com.isoftstone.ifa.web.base.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12.  
  13. public class XssFilter implements Filter {
  14. FilterConfig filterConfig = null;
  15.  
  16. @Override
  17. public void init(FilterConfig filterConfig) throws ServletException {
  18. this.filterConfig = filterConfig;
  19. }
  20.  
  21. @Override
  22. public void doFilter(ServletRequest request,
  23. ServletResponse response, FilterChain chain)
  24. throws IOException, ServletException {
  25. //对请求进行拦截,防xss处理
  26. chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
  27. }
  28.  
  29. @Override
  30. public void destroy() {
  31. this.filterConfig = null;
  32. }
  33.  
  34. }

XssFilter

3.新增XssHttpServletRequestWrapper拦截过滤class类

  1. package com.isoftstone.ifa.web.base.filter;
  2.  
  3. import java.util.regex.Pattern;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletRequestWrapper;
  7.  
  8. import org.apache.commons.lang.StringUtils;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11.  
  12. public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
  13. private static final Logger logger = LoggerFactory
  14. .getLogger(XssHttpServletRequestWrapper.class);
  15.  
  16. public XssHttpServletRequestWrapper(HttpServletRequest request) {
  17. super(request);
  18. }
  19.  
  20. /**
  21. * 对数组参数进行特殊字符过滤
  22. */
  23. @Override
  24. public String[] getParameterValues(String name) {
  25. String[] values = super.getParameterValues(name);
  26. if (values != null) {
  27. int length = values.length;
  28. String[] escapseValues = new String[length];
  29. for (int i = 0; i < length; i++) {
  30. escapseValues[i] = escapeHtml4(values[i]);
  31. }
  32. return escapseValues;
  33. }
  34. return super.getParameterValues(name);
  35. }
  36.  
  37. @Override
  38. public String getQueryString() {
  39. return escapeHtml4(super.getQueryString());
  40. }
  41.  
  42. /**
  43. * 对参数中特殊字符进行过滤
  44. */
  45. @Override
  46. public String getParameter(String name) {
  47. return escapeHtml4(super.getParameter(name));
  48. }
  49.  
  50. /**
  51. * 对请求头部进行特殊字符过滤
  52. */
  53. @Override
  54. public String getHeader(String name) {
  55. return escapeHtml4(super.getHeader(name));
  56. }
  57.  
  58. public static String escapeHtml4(String value) {
  59. if (StringUtils.isNotBlank(value)) {
  60. // 避免script 标签
  61. Pattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);
  62. value = scriptPattern.matcher(value).replaceAll("");
  63. // 避免src形式的表达式
  64. scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  65. value = scriptPattern.matcher(value).replaceAll("");
  66. scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  67. value = scriptPattern.matcher(value).replaceAll("");
  68. // 删除单个的 </script> 标签
  69. scriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);
  70. value = scriptPattern.matcher(value).replaceAll("");
  71. // 删除单个的<script ...> 标签
  72. scriptPattern = Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  73. value = scriptPattern.matcher(value).replaceAll("");
  74. // 避免 eval(...) 形式表达式
  75. scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  76. value = scriptPattern.matcher(value).replaceAll("");
  77. // 避免 e­xpression(...) 表达式
  78. scriptPattern = Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  79. value = scriptPattern.matcher(value).replaceAll("");
  80. // 避免 javascript: 表达式
  81. scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);
  82. value = scriptPattern.matcher(value).replaceAll("");
  83. // 避免 vbscript:表达式
  84. scriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);
  85. value = scriptPattern.matcher(value).replaceAll("");
  86. // 避免 onload= 表达式
  87. scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  88. value = scriptPattern.matcher(value).replaceAll("");
  89. // 避免 onmouseover= 表达式
  90. scriptPattern = Pattern.compile("onmouseover(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  91. value = scriptPattern.matcher(value).replaceAll("");
  92. // 避免 onfocus= 表达式
  93. scriptPattern = Pattern.compile("onfocus(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  94. value = scriptPattern.matcher(value).replaceAll("");
  95. // 避免 onerror= 表达式
  96. scriptPattern = Pattern.compile("onerror(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  97. value = scriptPattern.matcher(value).replaceAll("");
  98.  
  99. //移除特殊标签
  100. value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
  101. }
  102. return value;
  103. }
  104.  
  105. public static void main(String[] args) {
  106. String value = "&receiveCellphone=13888888888&receiveEmail=ssssss%40qq.com\"/><img/src=1 onclick=alert(document.cookie)>&";
  107. System.out.println("===:"+escapeHtml4(value));
  108. }
  109. }

XssHttpServletRequestWrapper

java请求URL带参之防XSS攻击的更多相关文章

  1. 066 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参有返回值方法

    066 01 Android 零基础入门 01 Java基础语法 08 Java方法 04 带参有返回值方法 本文知识点:带参有返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  2. 065 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参无返回值方法

    065 01 Android 零基础入门 01 Java基础语法 08 Java方法 03 带参无返回值方法 本文知识点:带参无返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  3. 【前端安全】JavaScript防XSS攻击

    什么是XSS XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击.本来缩小应该是CSS,但为了和层叠样式(Cas ...

  4. HTML标签防XSS攻击过滤模块--待优化

    HTML标签防XSS攻击过滤模块 http://cnodejs.org/topic/5058962f8ea56b5e7806b2a3

  5. 工作记录之 [ python请求url ] v s [ java请求url ]

    背景: 模拟浏览器访问web,发送https请求url,为了实验需求需要获取ipv4数据包 由于不做后续的内容整理(有内部平台分析),故只要写几行代码请求发送https请求url列表中的url即可 开 ...

  6. Spring MVC 之 请求url 带后缀的情况

    RequestMappingInfoHandlerMapping 在处理http请求的时候, 如果 请求url 有后缀,如果找不到精确匹配的那个@RequestMapping方法.那么,就把后缀去掉, ...

  7. java请求url返回json

    package cn.it.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...

  8. [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误

    一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...

  9. SpringBoot防XSS攻击

    1 . pom中增加依赖 <!-- xss过滤组件 --> <dependency> <groupId>org.jsoup</groupId> < ...

随机推荐

  1. Kafka如何保证消息的可靠性传输

    1.消费端弄丢了数据 唯一可能导致消费者弄丢数据的情况,就是说,你消费到了这个消息,然后消费者那边自动提交了 offset,让 Kafka 以为你已经消费好了这个消息,但其实你才刚准备处理这个消息,你 ...

  2. synchronized和lock有什么区别?

    一.原始构成 synchronized是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象只有在同步代码块和同 ...

  3. “纽劢科技杯”第十六届同济大学程序设计竞赛暨上海邀请赛同步赛 J-张老师的游戏

    传送门 题目描述     在空闲时间,张老师习惯性地和菜哭武玩起了取石子游戏,这次的游戏规则有些不同,在他们面前有n堆石子,其中,第i堆石子的个数为a[i],现在制定规则如下:     从张老师开始, ...

  4. rnn_model.fit Incompatible shapes

        pip3 install git+https://github.com/keras-team/keras.git -U Restart notebook

  5. PHP 消息队列 详解

    前言:之前做过的一些项目中有时候会接触到消息队列,但是对消息队列并没有一个很清楚的认知,本篇文章将会详细分析和归纳一些笔记,以供后续学习. 一.消息对列概念 从本质上说消息对列就是一个队列结构的中间件 ...

  6. vue路由实现多视图的单页应用

    多视图的单页应用:在一个页面中实现多个页面不同切换,url也发生相应变化. router-view结合this.$router.push("/pickUp")实现,效果如下: 当点 ...

  7. I/O模型系列之五:IO多路复用 select、poll、epoll

    IO多路复用之select.poll.epoll IO多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. 应用:适用于针 ...

  8. 实验一 Java开发环境的熟悉(Linux + Idea) 20175301李锦然

    https://gitee.com/ShengHuoZaiDaXue/20175301.git 实验一 Java开发环境的熟悉(Linux + Idea) 实验内容 1.使用JDK编译.运行简单的Ja ...

  9. win 域

    域/AD域/域环境: 1.域:Domain 2.微软技术:1)工作组:平等             2)域 3.主要优点:集中管理/统一管理 4.域成员:1)域控制器:DC           2)成 ...

  10. 自相关系数 ACF与偏自相关系数PACF,拖尾和截尾

    1.ACF y(t,s)=E(Xt-µt)(Xs-µs) 定义ρ(t,s)为时间序列的自相关系数,为ACF ρ(t,s)=y(t,s)/sqrt(DXt * DXs) E为期望,D为方差 2.PACF ...