# 消除不受信任的HTML (来防止XSS攻击)
<div><br></div>
<h2>问题</h2>
<p>在做网站的时候,经常会提供用户评论的功能。有些不怀好意的用户,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,此时需要清理该HTML,以避免跨站脚本<a href="http://en.wikipedia.org/wiki/Cross-site_scripting">cross-site scripting</a>攻击(XSS)。</p>
<h2>方法</h2>
<p>使用jsoup HTML <code><a title="The whitelist based HTML cleaner." href="http://jsoup.org/apidocs/org/jsoup/safety/Cleaner.html">Cleaner</a></code>
方法进行清除,但需要指定一个可配置的 <code><a title="Whitelists define what HTML (elements and attributes) to allow through the cleaner." href="http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html">Whitelist</a></code>。</p>
<pre><code>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>
</code></pre>
<h2>说明</h2>
<p>XSS又叫CSS (Cross Site Script)
,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意
攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。所以我们经常只让用户输入纯文本的内容,但这样用户体验
就比较差了。</p>
<p>一个更好的解决方法就是使用一个富文本编辑器WYSIWYG如<a href="http://ckeditor.com/">CKEditor</a> 和 <a href="http://tinymce.moxiecode.com/">TinyMCE</a>。
这些可以输出HTML并能够让用户可视化编辑。虽然他们可以在客户端进行校验,但是这样还不够安全,需要在服务器端进行校验并清除有害的HTML代码,这
样才能确保输入到你网站的HTML是安全的。否则,攻击者能够绕过客户端的Javascript验证,并注入不安全的HMTL直接进入您的网站。</p>
<p>jsoup的whitelist清理器能够在服务器端对用户输入的HTML进行过滤,只输出一些安全的标签和属性。</p>
<p>jsoup提供了一系列的<code><a title="Whitelists define what HTML (elements and attributes) to allow through the cleaner." href="http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html">Whitelist</a></code>基本配置,能够满足大多数要求;但如有必要,也可以进行修改,不过要小心。</p>
<p>这个cleaner非常好用不仅可以避免XSS攻击,还可以限制用户可以输入的标签范围。</p>
<h2>参见</h2>
<ul>
<li>参阅<a href="http://ha.ckers.org/xss.html">XSS cheat sheet</a> ,有一个例子可以了解为什么不能使用正则表达式,而采用安全的whitelist parser-based清理器才是正确的选择。</li>
<li>参阅<code><a title="The whitelist based HTML cleaner." href="http://jsoup.org/apidocs/org/jsoup/safety/Cleaner.html">Cleaner</a></code>
,了解如何返回一个 <code><a title="A HTML Document." href="http://jsoup.org/apidocs/org/jsoup/nodes/Document.html">Document</a></code>
对象,而不是字符串</li>
<li>参阅<code><a title="Whitelists define what HTML (elements and attributes) to allow through the cleaner." href="http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html">Whitelist</a></code>,了解如何创建一个自定义的whitelist</li>
<li><a href="http://en.wikipedia.org/wiki/Nofollow">nofollow</a> 链接属性了解</li></ul>
- Introduction
- 爬虫相关技能介绍
- 爬虫简单介绍
- 爬虫涉及到的知识点
- 爬虫用途
- 爬虫流程介绍
- 需求描述
- Http请求处理
- http基础知识介绍
- http状态码
- httpheader
- java原生态处理http
- URL类
- 获取URL请求状态
- 模拟Http请求
- apache httpclient
- Httpclient1
- httpclient2
- httpclient3
- httpclient4
- httpclient5
- httpclient6
- okhttp
- OKhttp使用教程
- 技术使用
- java执行javascript
- 网页解析
- Xpath介绍
- HtmlCleaner
- HtmlCleaner介绍
- HtmlCleaner使用
- HtmlParser
- HtmlParser介绍
- Jsoup
- 解析和遍历一个HTML文档
- 解析一个HTML字符串
- 解析一个body片断
- 从一个URL加载一个Document
- 从一个文件加载一个文档
- 使用DOM方法来遍历一个文档
- 使用选择器语法来查找元素
- 从元素抽取属性,文本和HTML
- 处理URLs
- 示例程序 获取所有链接
- 设置属性的值
- 设置一个元素的HTML内容
- 消除不受信任的HTML (来防止XSS攻击)
- 正则表达式
- elasticsearch笔记
- 下载安装elasticsearch
- 检查es服务健康