`
zhangjunbao
  • 浏览: 91806 次
  • 性别: 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>


相关推荐

Global site tag (gtag.js) - Google Analytics