在作网站的时候,常常会提供用户评论的功能。有些不怀好意的用户,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,此时须要清理该HTML,以免跨站脚本cross-site scripting攻击(XSS)。html
使用jsoup HTML Cleaner
方法进行清除,但须要指定一个可配置的 Whitelist
。node
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属于被动式的攻击,由于其被动且很差利用,因此许多人常忽略其危害性。因此咱们常常只让用户输入纯文本的内容,但这样用户体验就比较差了。正则表达式
一个更好的解决方法就是使用一个富文本编辑器WYSIWYG如CKEditor 和 TinyMCE。这些能够输出HTML并可以让用户可视化编辑。虽然他们能够在客户端进行校验,可是这样还不够安全,须要在服务器端进行校验并清除有害的HTML代码,这样才能确保输入到你网站的HTML是安全的。不然,攻击者可以绕过客户端的Javascript验证,并注入不安全的HMTL直接进入您的网站。api
jsoup的whitelist清理器可以在服务器端对用户输入的HTML进行过滤,只输出一些安全的标签和属性。安全
jsoup提供了一系列的Whitelist
基本配置,可以知足大多数要求;但若有必要,也能够进行修改,不过要当心。服务器
这个cleaner很是好用不只能够避免XSS攻击,还能够限制用户能够输入的标签范围。xss
参阅XSS cheat sheet ,有一个例子能够了解为何不能使用正则表达式,而采用安全的whitelist parser-based清理器才是正确的选择。编辑器
参阅Whitelist
,了解如何建立一个自定义的whitelistspa
nofollow 连接属性了解