问题--XSS攻击
在做网站的时候,经常会提供用户评论的功能。有些不怀好意的用户,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,此时需要清理该HTML,以避免跨站脚本cross-site scripting攻击(XSS)。
方法--过滤
可以选用的工具有:
- Jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。
- HTML Parser 是一个对HTML进行分析的快速实时的解析器,最新的发行版本是1.6,另外2.0的开发版本已经两年没有进展了。(采用Java实现)
- XSS HTMLFilter这是一个采用Java实现的开源类库。用于分析用户提交的输入,消除潜在的跨站点脚本攻击(XSS),恶意的HTML,或简单的HTML格式错误。
- HTML Purifier是基于php 5所编写的HTML过滤器,帮助用户保障HTML的合法性,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML。它可以使你确认HTML是否包含跨站脚本攻击企图或其它的恶意攻击,有效防范XSS攻击。
Jsuop使用示例代码
使用jsoup HTML Cleaner
方法进行清除,但需要指定一个可配置的 Whitelist
。http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html (Jsoup whitelist文档)
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>
OSChina网站使用的Jsoup, 对输入内容进行过滤的代码:
private final static Whitelist user_content_filter = Whitelist.relaxed(); static { user_content_filter.addTags("embed","object","param","span","div"); user_content_filter.addAttributes(":all", "style", "class", "id", "name"); user_content_filter.addAttributes("object", "width", "height","classid","codebase"); user_content_filter.addAttributes("param", "name", "value"); user_content_filter.addAttributes("embed", "src","quality","width","height","allowFullScreen","allowScriptAccess","flashvars","name","type","pluginspage"); } /** * 对用户输入内容进行过滤 * @param html * @return */ public static String filterUserInputContent(String html) { if(StringUtils.isBlank(html)) return ""; return Jsoup.clean(html, user_content_filter); //return filterScriptAndStyle(html); }
说明
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。所以我们经常只让用户输入纯文本的内容,但这样用户体验就比较差了。
一个更好的解决方法就是使用一个富文本编辑器WYSIWYG如CKEditor 和 TinyMCE。这些可以输出HTML并能够让用户可视化编辑。虽然他们可以在客户端进行校验,但是这样还不够安全,需要在服务器端进行校验并清除有害的HTML代码,这样才能确保输入到你网站的HTML是安全的。否则,攻击者能够绕过客户端的Javascript验证,并注入不安全的HMTL直接进入您的网站。
jsoup的whitelist清理器能够在服务器端对用户输入的HTML进行过滤,只输出一些安全的标签和属性。
jsoup提供了一系列的Whitelist
基本配置,能够满足大多数要求;但如有必要,也可以进行修改,不过要小心。
这个cleaner非常好用不仅可以避免XSS攻击,还可以限制用户可以输入的标签范围。
参见
- 参阅XSS cheat sheet ,有一个例子可以了解为什么不能使用正则表达式,而采用安全的whitelist parser-based清理器才是正确的选择。
- 参阅
Cleaner
,了解如何返回一个Document
对象,而不是字符串 - 参阅
Whitelist
,了解如何创建一个自定义的whitelist - nofollow 链接属性了解
转自:http://www.open-open.com/jsoup/whitelist-sanitizer.htm
相关推荐
主要介绍了springboot2.x使用Jsoup防XSS攻击的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser...SpringBoot整合XssFilter,Jsoup等实现...
jsoup 中文帮助文档 1. 解析和遍历一个html文档输入 2. 解析一个html字符串 3. 解析一个body片断 4. 根据一个url加载Document对象 5. 根据一个文件加载Document对象数据抽取 ...14. 消除不受信任的html (来防止xss攻击)
jsoup Cookbook(中文版) 入门 解析和遍历一个html文档 输入 解析一个html字符串 解析一个body片断 根据一个url加载Document对象 根据一个文件加载Document对象 ...消除不受信任的html (来防止xss攻击)
使用Jsoup解析html网页,包含jsoup.jar \ api.chm \ 代码
jsoup中文帮助文档 doc 版本 目录 入门 1. 解析和遍历一个html文档 输入 2. 解析一个html字符串 3. 解析一个body片断 4. 根据一个url加载Document对象 5. 根据一个文件加载...14. 消除不受信任的html (来防止xss攻击)
jsoup:Java HTML 解析器 jsoup是一个用于处理...根据安全列表清理用户提交的内容,以防止 XSS 攻击 输出整洁的 HTML jsoup 旨在处理各种常见的 HTML;从原始和验证,到无效的标签汤;jsoup 将创建一个合理的解析树。
jsoup和jtidy 对html操作,将不规范的html转换为xhtml
使用jsoup对Html解析并生成excel
这是使用Jsoup解析HTML得到数据的一个小例子,具体的使用方法请参见我的博客:http://blog.csdn.net/ProgramChangesWorld/article/details/47134255
使用android解析html文档,替换html中的内容
jsoup解析html网页的api
使用Jsoup库解析HTML、XML或URL链接中的DOM节点 Jsoup进行Html的Dom解析
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来...本文主要介绍如何使用 jsoup 来进行常用的 HTML 解析。
使用JSoup实现解析URL或HTML的内容
如何使用jsoup
支持Android4.0,真机与模拟器都测试通过,使用异步方式解析
使用了一个简单的例子来测试在安卓中利用Jsoup,非常简单,解决很多小白的问题。 1.在lib中倒入jsoup-1.10.2.jar,在Android Studio中切换到Project目录下,将jsoup-1.10.2.jar放入lib,然后右键点击Add As Library...
通过使用jsoup库,获取网页的内容,解析修改网页,并且能够显示出修改的结果。
Jsoup