2014-12-08 97 views
2

Vaadin框架具有此有用的RichTextArea組件。然而,用戶可能會將有害的JavaScript插入到該字段中,以便在保存之前對字段的值進行消毒。消毒Vaadin RichTextArea

Vaadin這樣做的方式是什麼? Vaadin的書只提到該領域「應該被消毒」,但沒有提供如何實際執行的暗示。在一週前的論壇上詢問沒有得到任何答覆。

我不想再爲項目添加庫了。如何在Java中使用或不使用Vaadin製作自己的RichTextArea消毒器?

+0

這取決於您將輸出輸入值的位置。 如果您通過RichText或Label組件「顯示」它們,那麼您不必執行任何操作,因爲它們在顯示時會正確轉義。 – 2014-12-08 07:01:04

+0

它將在視圖中顯示並作爲實體Bean的屬性保存在數據庫中(這是描述訂單的消息)。我猜想適用於Rich Text輸入的Vaadin中的合適查看組件只是在readOnly模式下的RichTextArea。 – 2014-12-08 08:55:08

+0

在這種情況下,你不需要做任何事情。因爲vaadin RichTextArea應該正確地轉義JS東西。這並不妨礙最終用戶以但在顯示時不應該執行,只顯示爲。但請注意,如果您將來使用另一個用戶界面在某處顯示它,則會暫時中斷... – 2014-12-08 10:57:57

回答

4

最簡單的方法是使用JSOUP,它與Vaadin 7(vaadin-server取決於它)一起提供。例如: -

Jsoup.clean(richTextArea.getValue(), Whitelist.simpleText()) 

Jsoup.clean

public static String clean(String bodyHtml, Whitelist whitelist) 

獲得來自不受信任的輸入HTML安全的HTML,通過解析輸入HTML和過濾它通過允許標籤的白名單和屬性。

參數:

bodyHtml - 輸入不可信HTML(體片段)

whitelist - 允許HTML元素

返回的白名單:

安全HTML(體片段)

and Whitelist

public class Whitelist extends Object 

白名單定義什麼HTML(元素和屬性),以允許通過所述清潔器。其他一切都被刪除。

開始用默認值中的一個:

  • none()
  • simpleText()
  • basic()
  • basicWithImages()
  • relaxed()
+0

謝謝!是的,我現在成功地使用了這個功能。 – 2014-12-10 07:19:03