# 消除不受信任的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服務健康