欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HetaoBlogXssHTMLFilter- 改进了一个java版开源的xss html filter HTMLJavaF#.net 

程序员文章站 2022-03-13 14:56:11
...
转自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);