jsoup的白名单消除xss隐患

http://my.oschina.net/itsoku/blog/166890


Jsoup学习之Whitelist类

发表于6个月前(2013-10-05 18:41)   阅读( 296) | 评论( 0)  3人收藏此文章, 我要收藏
0
jsoup

Whitelist类

一、类结构

java.lang.Object

  org.jsoup.safety.Whitelist

public class Whitelist   

     extends

     Object

Whitelist类定义了一些可以被保留的标签和属性,不属于这个范围的标签和属性的都要被删除。

默认的配置方法有:

none()

simpleText()

basic()

basicWithImages()

relaxed()

如果想扩大筛选范围,可以使用以下方法:

addTags(java.lang.String...)

addAttributes(java.lang.String,java.lang.String...)

addEnforcedAttribute(java.lang.String,java.lang.String, java.lang.String)

addProtocols(java.lang.String,java.lang.String, java.lang.String...)

二、方法

Constructor Summary

Whitelist() 
          
创建一个空白的Whitelist

 

 

Method Summary

 Whitelist

addAttributes(String tag, String... keys) 

给标签添加属性。Tag是属性名,keys对应的是一个个属性值。例如:addAttributes("a", "href", "class") 表示:给标签a添加hrefclass属性,即允许标签a包含hrefclass属性。如果想给每一个标签添加一组属性,使用:all。例如: addAttributes(":all", "class").即给每个标签添加class属性。

 Whitelist

addEnforcedAttribute(String tag, String key, String value) 
给标签添加强制性属性,如果标签已经存在了要添加的属性,则覆盖原有值。tag:标签;key:标签的键;value:标签的键对应的值。例如: addEnforcedAttribute("a", "rel", "nofollow") 表示 <a href="..." rel="nofollow">

 Whitelist

addProtocols(String tag, String key, String... protocols) 
URL属性添加协议。例如: addProtocols("a", "href", "ftp", "http", "https")标签ahref键可以指向的协议有ftphttphttps

 Whitelist

addTags(String... tags) 
Whitelist添加标签

static Whitelist

basic() 
允许的标签包括: a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, strike, strong, sub, sup, u, ul,以及合适的属性。标签a指向的连接可以是 http, https, ftp, mailto,转换完后会强制添加 rel=nofollow这个属性。不允许包含图片。

static Whitelist

basicWithImages() 

basic的基础上增加了图片的标签:img以及使用src指向httphttps类型的图片链接。

protected  boolean

isSafeTag(String tag) 
判断参数tag是否符合当前的Whitelist

static Whitelist

none() 
只保留文本,其他所有的html内容均被删除

 Whitelist

preserveRelativeLinks(boolean preserve) 
false
(默认):不保留相对地址的urltrue:保留相对地址的url

static Whitelist

relaxed() 
允许的标签: a, b, blockquote, br, caption, cite, code, col, colgroup, dd, dl, dt, em, h1, h2, h3, h4, h5, h6, i, img, li, ol, p, pre, q, small, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, u, ul结果不包含标签rel=nofollow ,如果需要可以手动添加。

static Whitelist

simpleText() 
只允许: b, em, i, strong, u.

三、总结

Whitelist的基本方法有四种:

none:只保留了文本;

simpleText:简单的文本属性b, em, i, strong, u

basica, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q,small,strike, strong, sub, sup, u, ul

basicWithImagesa, b, blockquote, br, cite, code, dd, dl,dt, em, i, li, ol, p, pre, q, small, strike, strong, sub, sup, u, ulimgsrc

Relaxed:a, b, blockquote,br, caption, cite, code, col, colgroup, dd, dl, dt, em, h1, h2, h3, h4, h5, h6,i, img, li, ol, p, pre, q, small, strike, strong, sub, sup, table, tbody, td,tfoot, th, thead, tr, u, ul

四种所包含的属性越来越多,如果还不满足,可以使用addAttributesaddEnforcedAttributeaddProtocolsaddTags但是这个添加要谨慎。

四、实例

[java]  view plain  copy  print  ?
  1. public static void JsoupClean(){  
  2.    html = "<ahref=\"http://www.baidu.com/gaoji/preferences.html\"name=\"tj_setting\">搜索设置</a>";  
  3.    String doc = Jsoup.clean(html, baseUri, Whitelist.none());      
  4.    System.out.println(doc);  
  5.    System.out.println("*******");  
  6.    doc = Jsoup.clean(html, baseUri, Whitelist.simpleText());  
  7.    System.out.println(doc);  
  8.    System.out.println("*******");  
  9.    doc = Jsoup.clean(html, baseUri, Whitelist.basic());  
  10.    System.out.println(doc);  
  11.    System.out.println("*******");  
  12.    doc = Jsoup.clean(html, baseUri, Whitelist.basicWithImages());  
  13.    System.out.println(doc);  
  14.    System.out.println("*******");  
  15.    doc = Jsoup.clean(html, baseUri, Whitelist.relaxed());  
  16.    System.out.println(doc);  
  17. }  

本文为Eliot原创,转载请注明出处:  http://blog.csdn.net/xyw_eliot/article/details/9145523


你可能感兴趣的:(jsoup的白名单消除xss隐患)