2010-07-04 20 views
6

我的目標是取最終用戶輸入的HTML,刪除某些不安全的標籤,如<script>,並將其添加到文檔中。有人知道一個好的Javascript庫來清理html嗎?是否有一個好的基於Javascript的HTML解析庫可用?

我尋找了一圈,發現了幾個網上,包括John Resig's HTML parserErik Arvidsson's simple html parserGoogle's Caja Sanitizer,但我一直沒能找到多少信息是否人已經開始使用這些庫有不錯的經歷,我很擔心他們並不足以處理任意的HTML。將我的Java服務器發送給我的服務器進行消毒是否會更好?

+4

鑑於最好在服務器端進行消毒處理,可能不值得花費額外的努力。除非您的客戶端清潔程序始終提供與您的服務器端完全相同的結果,否則它可能不值得。 – 2010-07-04 23:45:48

回答

2

您可以使用jQuery解析HTML,但我確定任何基於黑名單的清除方法(即過濾)都將失敗 - 您可能需要基於「過濾」的方法,最終不需要無論如何,依靠JavaScript來保證安全。在任何情況下,以供參考,你可以使用jQuery的DOM的分析是這樣的:

var htmlS = "<html>etc.etc."; 
$(htmlS).remove("script"); /* DONT RELY ON THIS FOR SECURITY */ 
+0

好點。事實上,你可能甚至不需要* jquery包裝器本身,但它會讓事情變得更容易。只要讓瀏覽器自己處理解析,然後使用可用的DOM方法來做任何你想做的事情。 – Matchu 2010-07-04 23:45:20

+3

介意解釋如何? – icktoofay 2010-07-04 23:45:30

+0

@icktoofay是編輯我的壞 – 2010-07-04 23:46:37

2

我會過得更好是在發送HTML到我的Java服務器進行消毒?

是的。

過濾「不安全」輸入必須在服務器端進行。沒有其他辦法可以做到這一點。過濾客戶端是不可能的,因爲「客戶端」可能是一個Web瀏覽器,或者它可能很容易成爲一個帶有腳本的bot。

+2

過濾不安全的輸入,是的,必須在服務器上完成,因爲客戶端可以通過不進行它應該做的過濾來傷害其他用戶。然而,這是過濾不安全的輸出,而不過濾的客戶端只會傷害自己。因此,用Javascript做這件事很好。 – 2010-07-05 00:07:14

+0

@bart「一個不過濾的客戶端只會傷害自己,因此,用Javascript做這件事很好」< - 這並不完全正確,因爲一個被入侵的用戶可能有訪問權限影響其他用戶 – 2010-07-05 01:22:03

+0

受損用戶可以做各種不好的事情。如果您在服務器上過濾出腳本標記,則只會在渲染時將它們放回。或者更可能的是,它不會帶來這種不便,並直接運行惡意代碼。 – 2010-07-05 08:13:04

相關問題