`
zhangjunbao
  • 浏览: 94947 次
  • 性别: Icon_minigender_1
  • 来自: 核桃博客
社区版块
存档分类
最新评论

HetaoBlogXssHTMLFilter- 改进了一个java版开源的xss html filter

阅读更多
转自http://www.hetaoblog.com/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%BC%80%E6%BA%90-hetaoblogxsshtmlfilter-%E6%94%B9%E8%BF%9B%E4%BA%86%E4%B8%80%E4%B8%AAjava%E7%89%88%E5%BC%80%E6%BA%90%E7%9A%84xss-html-filter/



搞防止xss的时候,找了一圈发现比较简单易用的属于这个,

http://xss-html-filter.sourceforge.net/

下面是作者的页面

http://josephoconnell.com/java/xss-html-filter/

不过这个xss html filter有个问题,不支持对属性值的过滤设定,

简单的说,下面的style是合法的
<span style=”color:#121212;”></span>

下面的style是非法的,有xss攻击漏洞

<span STYLE=”xss:expression(alert(‘XSS’))”>2</span>

但是原来的版本只能要么支持style属性,要么不支持style属性,不能设置支持style里面的某些内容

所以我改进了一下,代码在这里,欢迎提出改进意见

http://hetaoblog.googlecode.com/files/HetaoBlogXssHTMLFilter.java

我喜欢简洁的修改代码完成,所以设置的允许的html元素、属性和属性的值直接修改构造函数:)

使用上:

* 1. 修改构造函数 HetaoBlogXssHTMLFilter() 选择允许的html元素、属性和属性的值

下面是部分例子

{
final ArrayList<Attribute> span_atts = new ArrayList<Attribute>();
Map<String, Pattern> allowedAttrValues = new HashMap<String, Pattern>();
allowedAttrValues.put(“color”, Pattern.compile(“(#([0-9a-fA-F]{6}|[0-9a-fA-F]{3}))”));
allowedAttrValues.put(“font-weight”, Pattern.compile(“bold”));
allowedAttrValues.put(“text-align”, Pattern.compile(“(center|right|justify)”));
allowedAttrValues.put(“font-style”, Pattern.compile(“italic”));
allowedAttrValues.put(“text-decoration”, Pattern.compile(“underline”));
allowedAttrValues.put(“margin-left”, Pattern.compile(“[0-9]+px”));
allowedAttrValues.put(“text-align”, Pattern.compile(“center”));

span_atts.add(new Attribute(“style”, allowedAttrValues));
vAllowed.put(“span”, span_atts);
}

{
final ArrayList<Attribute> div_atts = new ArrayList<Attribute>();
div_atts.add(new Attribute(“class”));
div_atts.add(new Attribute(“align”));
vAllowed.put(“div”, div_atts);
}
* 2. 调用类似这样的函数String outHtml = HetaoBlogXssHTMLFilter.filter(sourceHtmlString);
分享到:
评论
2 楼 zhangjunbao 2012-06-12  
兄台,这代码自从我第一次写了以后我就扔那里没去动了,
但是既然有人来用,我晚上回家就去看下你说的这问题,如果的确有bug我会尽快解决
1 楼 冷静 2012-06-11  
楼主,刚刚用你的过滤器就发现问题了

final ArrayList<Attribute> div_atts = new ArrayList<Attribute>();
Map<String, Pattern> allowedAttrValues = new HashMap<String, Pattern>();
allowedAttrValues.put("text-align", Pattern.compile("center"));   
div_atts.add(new Attribute("style", allowedAttrValues));
vAllowed.put("div", div_atts);


运行代码
    	HetaoBlogXssHTMLFilter vFilter=new HetaoBlogXssHTMLFilter();
		System.out.println(vFilter.filter("<div style=\"background-image:url(javascript:alert('XSS'));text-align:center;\">abc</div>"));



结果是:

<div style=\"background-image:url(javascript:alert('XSS'));text-align:center;\">abc</div>


相关推荐

    前端开源库-xss-filters

    "前端开源库-xss-filters"是一个专门针对这种情况设计的开源库,其目标是提供安全的XSS过滤器,帮助开发者有效地防止XSS攻击。 这个库的核心功能是提供一系列的输出过滤机制,这些过滤器能够识别并清除或转义可能...

    【PDF-XSS攻击】Java项目-上传文件-解决PDF文件XSS攻击

    PDF-XSS实例文件

    java_jvm_参数_-Xms_-Xmx_-Xmn_-Xss_调优总结.pdf

    本文档主要介绍Java虚拟机(JVM)中四个重要的参数:`-Xms`、`-Xmx`、`-Xmn` 和 `-Xss` 的含义、作用以及如何通过这些参数来优化JVM的性能。这些参数直接影响到Java应用程序运行时的内存管理策略,合理配置能够显著...

    jQuery-with-XSS 检测jQuery版本是否存在XSS漏洞

    动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS)的威胁,而静态站点则完全不受...

    JVM调优总结 -Xms -Xmx -Xmn -Xss

    但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在 3000~5000 左右。 在 JVM 调优中,还需要考虑垃圾回收器的选择。JVM 给了三种选择:串行收集器、并行收集器、并发收集器。串行收集器只...

    xss-labs-master.zip(xss注入通关游戏/靶场)

    `xss-labs-master.zip`包含了一个专门用于学习和实践XSS注入的通关游戏或靶场,对于网络安全测试人员来说,这是一个极好的学习资源。 **XSS分类** 1. **存储型XSS**:也称为持久型XSS,攻击者将恶意脚本存入服务器...

    xss-filter-spring-boot-starter:springboot自动xss

    xss-filter-spring-boot-starter springboot自动xss 使用方法在项目的pom.xml中加入依赖即口 &lt;groupId&gt;com.djk&lt;/groupId&gt; &lt;artifactId&gt;xss-filter-spring-boot-starter &lt;version&gt;0.0.1 目前支持3种入参数xss...

    java jvm 参数 -Xms -Xmx -Xmn -Xss -

    JVM内存调优是一个复杂的过程,需要根据应用程序的特性和资源需求进行调整。通常,我们需要关注垃圾收集器的性能,如新生代与老年代的占比,以及内存分配和回收的效率。同时,监控系统的CPU使用率、内存占用和GC日志...

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...

    xss-labs-master.rar

    "xss-labs-master.rar" 提供了一个针对XSS漏洞的专项练习平台,旨在帮助初学者及安全爱好者提升对XSS攻击的理解和防御能力。这个靶机资源共分为二十个关卡,由浅入深,逐步引导用户掌握XSS攻防的核心技巧。 一、XSS...

    Java防止xss攻击附相关文件下载

    你可以创建一个自定义Filter,对所有请求参数进行遍历,并对特殊字符进行转义。 2. **覆盖Servlet的getParameter方法**: Servlet API允许覆盖`getParameter`方法,这样在获取请求参数时就可以添加额外的安全检查...

    毕业设计-MeyboMail Web(Java)开源简化-meybomailweb项目源码

    【MeyboMail Web(Java)开源简化-meybomailweb项目源码】是一个针对Java开发人员的毕业设计项目,旨在提供一个基于Web的邮件系统实现。该项目以开源的形式,简化了邮件服务的开发流程,使开发者可以更快地理解和构建...

    JVM调优总结 Xms -Xmx -Xmn -Xss

    当-Xms与-Xmx相同时,JVM在启动时会分配一个固定大小的堆内存,从而避免了动态调整带来的性能开销。 - **示例**:`java -Xms3550m ...` #### 2. -Xmx(Maximum Heap Size) - **定义**:设置JVM可以使用的最大堆...

    关于pdf文件xss攻击问题,配置xssFilter方法

    SpringBoot是一个流行的Java Web开发框架,提供了丰富的安全组件。XSSFilter是用于过滤HTTP请求中可能存在的XSS攻击的一种机制。在SpringBoot应用中配置XSSFilter,可以确保传入和传出的数据都经过安全处理,防止XSS...

    JVM参数-Xms-Xmx-Xmn-Xss-调优总结.docx

    `-XX:SurvivorRatio` 设置年轻代中Eden区与Survivor区的比率,例如`-XX:SurvivorRatio=4`表示一个Survivor区占年轻代的1/6。 `-XX:MaxPermSize` 设定持久代(Permanent Generation)的大小,如`-XX:MaxPermSize=16...

    JS-XSS-.rar_XSS_js XSS

    它利用`&lt;script&gt;`标签可以跨域加载资源的特性,由服务器提供一个回调函数,返回数据包裹在该回调函数中,客户端通过动态创建`&lt;script&gt;`标签来调用这个返回的函数,从而实现跨域数据获取。 2. **CORS(Cross-Origin ...

    javaweb配置xssproject,完美解决安全检测报XSS漏洞

    XSSProject是一个专门针对XSS攻击防护的Java库,通过提供一系列的过滤规则和处理机制,帮助开发者构建更安全的Web应用。 首先,我们来了解一下XSSProject的核心功能。XSSProject主要包含以下几个方面: 1. **XSS...

    E069-web安全应用-存储型XSS的场景实践.pdf

    DVWA是一个开源的Web应用程序漏洞测试平台,旨在帮助开发者和安全专家测试Web应用程序的安全性。DVWA提供了多种类型的漏洞测试,包括SQL Injection、Cross-Site Scripting(XSS)、Cross-Site Request Forgery(CSRF...

    lucy-xss-filter

    Lucy-XSS:XssFilter,XssPreventer Lucy-XSS是一个包含两个防御模块的开源库,用于保护Web应用程序免受XSS攻击。 它支持基于白名单规则的安全策略。 当前的默认规则是Naver的标准。 您可以根据需要更改默认规则。...

    SpringBoot整合XSS.zip

    这通常是一个第三方库,例如SpringCloud Gateway中的XssFilter或者其他专门为SpringBoot设计的过滤器库。 2. **配置过滤器**:在SpringBoot的配置文件(application.properties或application.yml)中,添加Xss...

Global site tag (gtag.js) - Google Analytics