HTML Purifier in Java:HTMLInputFilter
在製作 web services 的時候,我們常需要防範不當使用者的惡意攻擊,
而在這些攻擊之中,最著名的就是XSS (Cross Site Scripting),
其運作方式和常用的攻擊手法可見下列連結:
而在眾多的 web services 程式語法中,以 PHP 對 xss 攻擊的防範最完全,
因為 PHP 有個套件名為 HTML Purifier ,如官網的小標題,這個套件的目的是:
Standards-Compliant HTML Filtering ,也就是除了過濾也還有將語法標準化的功能。
HTML Purifier 經由多方的努力已有成效,他可抵擋的攻擊可見 xssAttacks 。
然而針對其他程式語言的使用者,看著 PHP 套件如此強大卻沒辦法使用,
在網路上詢問也只能得到像這個網站的解答:HTML Purifier in Java ,
這篇的結論是在 Java 中使用 Resin Quercus (a PHP interpreter for the JVM) ,
但實際上也沒有人測過到底會不會 work.... ,而且這種繞了大彎的方法真的很麻煩,
於是我後來找到的解法是:HTMLInputFilter,雖然功能可能沒有 HTML Purifier 強,
但至少基本的功能都有了,也算是可行的解決之道。
以下就是 HTMLInputFilter 的使用範例:
如果不想浪費時間在 java 中呼叫 php 的功能,HTMLInputFilter 的確是個好選擇。
關鍵字:HTML, Purifier, HTMLInputFilter, xss, filter, purify, cross site scripting
參考資料:
而在這些攻擊之中,最著名的就是XSS (Cross Site Scripting),
其運作方式和常用的攻擊手法可見下列連結:
而在眾多的 web services 程式語法中,以 PHP 對 xss 攻擊的防範最完全,
因為 PHP 有個套件名為 HTML Purifier ,如官網的小標題,這個套件的目的是:
Standards-Compliant HTML Filtering ,也就是除了過濾也還有將語法標準化的功能。
HTML Purifier 經由多方的努力已有成效,他可抵擋的攻擊可見 xssAttacks 。
然而針對其他程式語言的使用者,看著 PHP 套件如此強大卻沒辦法使用,
在網路上詢問也只能得到像這個網站的解答:HTML Purifier in Java ,
這篇的結論是在 Java 中使用 Resin Quercus (a PHP interpreter for the JVM) ,
但實際上也沒有人測過到底會不會 work.... ,而且這種繞了大彎的方法真的很麻煩,
於是我後來找到的解法是:HTMLInputFilter,雖然功能可能沒有 HTML Purifier 強,
但至少基本的功能都有了,也算是可行的解決之道。
以下就是 HTMLInputFilter 的使用範例:
輸出的結果會像下面,其中4, 5兩行過濾後輸出是空的:
- import java.util.ArrayList;
- import com.josephoconnell.html.HTMLInputFilter;
- /**
- * 使用 HTMLInputFilter 達成過濾 xss 等惡意字串攻擊的範例
- *
- * @author werdna at http://werdna1222coldcodes.blogspot.com/
- */
- public class HTMLInputFilterDemo {
- public static void main(String[] args) {
- // For use of HTMLInputFilter, go to the followed website first.
- // http://josephoconnell.com/java/xss-html-filter/
- // 設定要過濾字串的 List
- // 常見的 xss 攻擊語法可見:http://htmlpurifier.org/live/smoketests/xssAttacks.php
- ArrayList<String> xssList = new ArrayList<String>();
- xssList.add("<script>alert(document.cookie)</script>");
- xssList.add("<script>alert('XSS')</script>");
- xssList.add("<img src=\"javascript:alert('XSS')\"> ");
- xssList.add("<BR SIZE=\"&{alert('XSS')}\">");
- xssList.add("<LINK REL=\"stylesheet\" HREF=\"javascript:alert('XSS');\">");
- // 取得 HTMLInputFilter 物件
- HTMLInputFilter htmlInpuFilter = new HTMLInputFilter();
- String purifiedHtml;
- for (String xss : xssList) {
- // 過濾 xss 字串
- purifiedHtml = htmlInpuFilter.filter(xss);
- System.out.println("原始 xss:" + xss + "\t\t過濾後:" +purifiedHtml);
- }
- }
- }
由以上可知,介由 HTMLInputFilter 的確可過濾 xss 的攻擊,
- 原始 xss:<script>alert(document.cookie)</script> 過濾後:alert(document.cookie)
- 原始 xss:<script>alert('XSS')</script> 過濾後:alert('XSS')
- 原始 xss:<img src="javascript:alert('XSS')"> 過濾後:<img src="#alert('XSS')" />
- 原始 xss:<BR SIZE="&{alert('XSS')}"> 過濾後:
- 原始 xss:<LINK REL="stylesheet" HREF="javascript:alert('XSS');">過濾後:
如果不想浪費時間在 java 中呼叫 php 的功能,HTMLInputFilter 的確是個好選擇。
關鍵字:HTML, Purifier, HTMLInputFilter, xss, filter, purify, cross site scripting
參考資料:
留言
張貼留言