Jsoup HTML 清理

1 消除不受信任的HTML (防止XSS攻击)

在作网站的时候,常常会提供用户评论的功能。有些不怀好意的用户,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,此时须要清理该HTML,以免跨站脚本cross-site scripting攻击(XSS)。 使用jsoup HTML Cleaner 方法进行清除,但须要指定一个可配置的 Whitelistjavascript

String unsafe = "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
    String safe = Jsoup.clean(unsafe, Whitelist.basic());
    // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

说明: 
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,由于其被动且很差利用,因此许多人常忽略其危害性。因此咱们常常只让用户输入纯文本的内容,但这样用户体验就比较差了。html

一个更好的解决方法就是使用一个富文本编辑器WYSIWYG如CKEditor 和 TinyMCE。这些能够输出HTML并可以让用户可视化编辑。虽然他们能够在客户端进行校验,可是这样还不够安全,须要在服务器端进行校验并清除有害的HTML代码,这样才能确保输入到你网站的HTML是安全的。不然,攻击者可以绕过客户端的JavaScript验证,并注入不安全的HMTL直接进入您的网站。java

jsoup的whitelist清理器可以在服务器端对用户输入的HTML进行过滤,只输出一些安全的标签和属性。api

jsoup提供了一系列的Whitelist基本配置,可以知足大多数要求;但若有必要,也能够进行修改,不过要当心。这个cleaner很是好用不只能够避免XSS攻击,还能够限制用户能够输入的标签范围。jsoup 使用一个 Whitelist 类用来对 HTML 文档进行过滤,该类提供几个经常使用方法:安全


 
操做 含义
none() 只容许包含文本信息
basic() 容许的标签包括:a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, strike, strong, sub, sup, u, ul, 以及合适的属性
simpleText() 只容许 b, em, i, strong, u 这些标签
basicWithImages() 在 basic() 的基础上增长了图片
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

若是这五个过滤器都没法知足你的要求呢,例如你容许用户插入 flash 动画,不要紧,Whitelist 提供扩展功能,例如 whitelist.addTags("embed","object","param","span","div"); 也可调用 addAttributes 为某些元素增长属性。服务器

相关文章
相关标签/搜索