java 过滤xss脚本

这是为Java Web应用程序编写的一个好简单的反跨站点脚本(XSS)过滤器。 它的基本作用是从请求参数中删除所有可疑字符串,然后将其返回给应用程序。 这是我以前关于该主题的帖子的改进。
您应该将其配置为链(web.xml)中的第一个过滤器,通常最好让它捕获对您站点的所有请求。
实际的实现包括两个类,实际的过滤器非常简单,它将HTTP请求对象包装在一个专门的HttpServletRequestWrapper中,它将执行我们的过滤。
public class XSSFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response);}}

包装程序将覆盖getParameterValues(),getParameter()和getHeader()方法,以在将所需字段返回给调用方之前执行过滤。 实际的XSS检查和剥离是在stripXSS()私有方法中执行的。

import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;public class XSSRequestWrapper extends HttpServletRequestWrapper {public XSSRequestWrapper(HttpServletRequest servletRequest) {super(servletRequest);}@Overridepublic 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] = stripXSS(values[i]);}return encodedValues;}@Overridepublic String getParameter(String parameter) {String value = super.getParameter(parameter);return stripXSS(value);}@Overridepublic String getHeader(String name) {String value = super.getHeader(name);return stripXSS(value);}private String stripXSS(String value) {if (value != null) {// NOTE: It's highly recommended to use the ESAPI library and uncomment the following line to// avoid encoded attacks.// value = ESAPI.encoder().canonicalize(value);// Avoid null charactersvalue = value.replaceAll("", "");// Avoid anything between script tagsPattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Avoid anything in a src='...' type of expressionscriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Remove any lonesome </script> tagscriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Remove any lonesome <script ...> tagscriptPattern = Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Avoid eval(...) expressionsscriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Avoid expression(...) expressionsscriptPattern = Pattern.compile("expression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Avoid javascript:... expressionsscriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Avoid vbscript:... expressionsscriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Avoid onload= expressionsscriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");}return value;}
}

请注意有关ESAPI库的注释,我强烈建议您将其检出并尝试将其包含在项目中。

如果您想深入了解该主题,建议您查看有关XSS和RSnake的XSS(跨站点脚本)备忘单的 OWASP页面 。

参考: Ricardo Zuasti博客博客中的JCG合作伙伴 Ricardo Zuasti提供了针对Java Web应用程序的更强大的反跨站点脚本(XSS)过滤器 。

翻译自: https://www.javacodegeeks.com/2012/07/anti-cross-site-scripting-xss-filter.html

java 过滤xss脚本

java 过滤xss脚本_Java Web应用程序的反跨站点脚本(XSS)过滤器相关推荐

  1. Java Web应用程序的反跨站点脚本(XSS)过滤器

    这是为Java Web应用程序编写的一个好简单的反跨站点脚本(XSS)过滤器. 它的主要作用是从请求参数中删除所有可疑字符串,然后将其返回给应用程序. 这是我以前关于该主题的帖子的改进. 您应该将其配 ...

  2. 跨站点脚本 (XSS)

    跨站点脚本 (XSS) 跨站点脚本 (XSS) 是客户端代码注入攻击.攻击者旨在通过在合法的网页或 Web 应用程序中包含恶意代码,在受害者的 Web 浏览器中执行恶意脚本.当受害者访问执行恶意代码的 ...

  3. 【burpsuite安全练兵场-客户端11】跨站点脚本XSS-20个实验(上)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  4. java非法字符检测_Java Web 一些特殊字符的过滤(appscan检查的安全问题)

    适用于出现以下问题: 1.SQL盲注 2.存储的跨站点脚本编制 或 跨站点脚本编制 import java.io.IOException; import java.util.Enumeration; ...

  5. 使用Java和Spring构建现代Web应用程序

    使用Spring Framework创建Java Web应用程序从未如此简单. 如果您已经熟悉Java并且几乎没有创建Web应用程序的经验,或者如果您担心所有很酷的孩子都放弃Java取而代之的是Rub ...

  6. 如何防止跨站点脚本 (XSS) 攻击完整指南

    跨站点脚本 (XSS) 攻击的完整指南.如何防止它以及 XSS 测试. 跨站点脚本 (XSS) 是每个高级测试人员都知道的最流行和易受攻击的攻击之一.它被认为是对 Web 应用程序最危险的攻击之一,也 ...

  7. 跨站点脚本(XSS)

    1. 简介 跨站点脚本(XSS)是当前web应用中最危险和最普遍的漏洞之一.安全研究人员在大部分最受欢迎的网站,包括Google, Facebook, Amazon, PayPal等网站都发现这个漏洞 ...

  8. 跨站点脚本(xss)_跨站点脚本(XSS)和预防

    跨站点脚本(xss) 如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是 ...

  9. 跨站点脚本(XSS)和预防

    如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是无限的. 在这里,我建 ...

最新文章

  1. Lumen报class does not exist的mailer坑
  2. HTML5语言教程:渐进使用HTML5语言识别
  3. boost::sort模块实现整数排序与右移函子反向排序示例
  4. git clone 失败
  5. 网络协议 8 - TCP协议(上):性恶就要套路深
  6. “用于无监督图像生成解耦的正交雅可比正则化”论文解读
  7. String length must be a multiple of four.
  8. 收获不止oracle在线,重温《收获不止Oracle》
  9. 【渗透测试实战】具体案例——讲讲SQL注入攻击是怎么回事?
  10. mysql cursor 字符集_两个MySQL存储过程中文问题的解决方案
  11. 团队作业个人博客07
  12. 网线的分类,以及作用
  13. 轻便提示插件tipTip
  14. vb.net 教程 20-1 农历 1
  15. 【邮件处理】邮件eml文件解析
  16. 中国这个研究所有多牛?2021年发表431篇SCI,平均影响因子超过9,年度品种推广面积600余万亩.........
  17. 暑假教师计算机培训总结,关于暑期教师信息技术培训总结范文
  18. Nginx的作用是什么?有什么用?
  19. 磁盘阵列怎么组linux系统,Linux系统下如何设置磁盘阵列?
  20. maven 国内可用的中央仓库 阿里云

热门文章

  1. Oracle入门(十二H)之设置、恢复和删除不可用列
  2. 设计模式之静态代理模式实战
  3. git删除本地分支、删除远程分支 复制分支
  4. python scratch unity_Unity3D研究院之2D游戏开发制作原理(二十一)
  5. 如何获得即时编译器(JIT)的汇编代码(linux环境下)
  6. 利用反射机制创建新类的两种方式及比较
  7. FeignClient调用服务及上传文件的注意点及问题
  8. sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中
  9. javaone_JavaOne 2015 –又一年,又向前迈进了一步
  10. spring boot注释_使用Spring Boot和注释支持配置Spring JMS应用程序