2010-07-14 91 views
3

我使用Owasp反薩米與易趣政策文件來防止我的網站上的XSS攻擊。如何不通過owasp antisamy將特殊字符轉換爲html實體

我也使用Hibernate搜索索引我的對象。

當我使用此代碼:

String html = "special word: été";  

// use the Ebay configuration file  
Policy policy = Policy.getInstance(xssPolicyFile.getInputStream()); 

AntiSamy as = new AntiSamy(); 
CleanResults cr = as.scan(html, policy); 

// result is now : "special word: été" 
result = cr.getCleanHTML(); 

正如你所看到的所有字符「é」已經轉化爲他們的HTML實體相當於「é

我的頁面是UTF-8,所以我不需要這種轉變。而且,當我用Hibernate Search索引這個文本時,它會用html實體索引這個單詞,所以我在索引中找不到單詞「été」。

如何強制antisamy不將特殊字符轉換爲他們的html實體等效?

感謝

PS:問題已經開通:http://code.google.com/p/owaspantisamy/issues/detail?id=99

回答

2

像穆罕默德說,在評論,Antisamy剛剛發佈了一個名爲新的指令:entityEncodeIntlChars

這裏的細節:http://code.google.com/p/owaspantisamy/source/detail?r=240

看來,這個指令解決了這個問題。

+0

是的,請不要使用StringEscapeUtils.unescapeHtml(clearedHtml),因爲它會打開您的XSS攻擊,正如通信中所解釋的經濟需求。 Unescaping不僅可以隱藏實體,還可以隱藏數據中存在的任何已轉義的HTML。 – Erlend 2012-08-14 09:55:42

0

淘AntiSamy源代碼後,我發現無論從修改AntiSamy除了改變這種行爲方式。

0

退房這一個:http://code.google.com/p/owaspantisamy/source/browse/#svn/trunk/dotNet/current/source/owaspantisamy/html/scan

抓住源頭,並注意重點班(AntiSamyDOMScanner,CleanResults)使用標準架構對象(如XmlDocument的)。編譯並使用您編譯的二進制文件運行 - 以便您可以在調試器中看到所有內容 - 就像哪個主要類實際上破壞了您的數據一樣。有了這些,你可以改變主要對象的一些屬性,使其停止或注入自己的後處理來恢復錯誤行爲(比如用正則表達式)。後者可以公開,作爲額外的頂級物業,說一個名叫NoMess :-)

機會是在這方面,這種行爲是語言(在樹幹有3),但同樣的戰術之間的不同將工作無論哪個你必須處理的一件事。

+0

我一直在想,但這非常棘手,因爲我使用Maven,所以我從不下載整個項目源來修改它。 Antisamy沒有實現這樣的功能,這很奇怪。 我想我會做,但它確實很醜。 – 2010-08-27 07:53:09

+0

這是一個很好的理由開始解耦:-)也可能是「假設」輸出編碼的問題。 – ZXX 2010-08-27 09:10:12

2

今天早上我遇到了同樣的問題。

我在一個類中封裝了antisamy,我使用apache Common-lang中的apache StringEscapeUtil來恢復特殊字符。

CleanResults cleanResults = antiSamy.scan(taintedHtml); 
cleanedHtml = cleanResults.getCleanHTML(); 
return StringEscapeUtils.unescapeHtml(cleanedHtml) 

結果是沒有HTML轉義特殊字符的清理HTML。

希望這會有所幫助。

+0

它可能真的不安全,不是嗎?如果我清理:「été 2011-01-28 15:10:45

+0

@Jerome C.,哪裏能解決這個問題?我接受了這個建議。你爲什麼認爲這是不安全的? – Mohamad 2011-06-15 16:41:15

+0

好吧,我認爲,當antisamy在這裏逃避它時,可能會非常危險,因爲你不僅轉換實體,而且可能編碼危險字符,如< >「'當你的景象 – 2011-06-17 15:28:51