`

使用Jsoup消除不受信任的HTML (来防止XSS攻击)

 
阅读更多

 

问题--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

 

 

分享到:
评论
1 楼 di1984HIT 2014-07-17  
写的很好,学习了

相关推荐

    jsoup Cookbook(中文版).chm

    jsoup Cookbook(中文版) 入门 解析和遍历一个html文档 输入 解析一个html字符串 解析一个body片断 根据一个url加载Document对象 根据一个文件加载Document对象 ...消除不受信任的html (来防止xss攻击)

    jsoup中文教程

    为了防止XSS攻击,Jsoup提供了方法来消除不受信任的HTML。这包括过滤掉不安全的标签和属性,确保生成的文档是安全的。 #### 总结 Jsoup是一个功能强大的库,尤其适合那些需要处理和解析HTML文档的Java开发者。它...

    jsoup中文帮助文档

    14. **消除不受信任的HTML(来防止XSS攻击)** ### 详细解释 #### 1. 解析和遍历一个HTML文档 为了解析HTML文档,首先需要将HTML字符串传递给`Jsoup.parse()`方法。例如: ```java String html = "&lt;html&gt;&lt;head&gt;...

    Jsoup+httpclient 模拟登陆和抓取

    - Jsoup提供了防止XSS攻击的HTML清理功能。 - 通过消除不受信任的HTML内容,保证解析后的数据安全。 8. 实际应用案例: - 在Java程序中使用Jsoup和HttpClient来模拟登录一个网站并抓取页面内容。 - 案例中包含...

    jsoup中文API

    Jsoup 也可以用来消除不受信任的 HTML,以防止 XSS 攻击。`Jsoup.clean(inputHtml, Whitelist)` 使用特定的白名单策略清理 HTML,确保只保留安全的标签和属性。 8. **程序示例:获取所有链接** 获取文档中的所有...

    Jsoup中文API

    Jsoup 提供了消除不受信任 HTML 的功能,用以防止 XSS(跨站脚本)攻击。`Jsoup.clean()` 方法可以清理恶意或不安全的 HTML。 8. 示例:获取所有链接: 要提取文档中的所有链接,可以使用 `doc.select("a[href]")...

    jsoupAPI中文版

    消除不受信任的HTML(来防止XSS攻击)** - 使用 `Jsoup.clean(String input, Whitelist whitelist)` 方法来清理HTML,防止XSS攻击。 - 示例:`String safeHtml = Jsoup.clean(untrustedHtml, Whitelist.basic());...

    jsoup api

    - 为了防止XSS攻击,jsoup提供了`Jsoup.clean(String html, Whitelist whitelist)`方法,消除不受信任的HTML,只保留指定的安全标签和属性。 9. **程序示例:获取所有链接** - 示例代码通常会展示如何使用`select...

    JSOUP的中文文档

    - XSS防护:JSOUP可以消除不受信任的HTML,以防止跨站脚本攻击。`Jsoup.clean(inputHtml, Whitelist)`方法可以清理输入的HTML,只保留指定的安全标签和属性。 7. **URL处理**: - JSOUP能够处理相对和绝对URL,...

    jsoup_api,一看就会

    14.消除不受信任的 HTML(防止 XSS 攻击) 为了避免跨站脚本攻击(XSS),可以使用 `Jsoup.clean()` 方法清理 HTML,例如: ```java String unsafeHtml = "&lt;script&gt;alert('XSS');&lt;/script&gt;"; String safeHtml = ...

    jsoup中文帮助文档.docx

    14. 消除不受信任的 HTML (防止 XSS 攻击) 为了避免跨站脚本(XSS)攻击,Jsoup 提供了 `clean()` 方法来清理 HTML。例如: ```java String untrustedHtml = "&lt;script&gt;alert('XSS');&lt;/script&gt;"; String safeHtml = ...

    jsoup Cookbook(中文版)

    14. 消除不受信任的 HTML (防止 XSS 攻击) 为了防止跨站脚本 (XSS) 攻击,可以使用 `Jsoup.clean(String html, Whitelist whitelist)` 清理 HTML。例如,清除所有 script 标签: ```java String safeHtml = Jsoup....

Global site tag (gtag.js) - Google Analytics