Vaadin框架具有此有用的RichTextArea組件。然而,用戶可能會將有害的JavaScript插入到該字段中,以便在保存之前對字段的值進行消毒。消毒Vaadin RichTextArea
Vaadin這樣做的方式是什麼? Vaadin的書只提到該領域「應該被消毒」,但沒有提供如何實際執行的暗示。在一週前的論壇上詢問沒有得到任何答覆。
我不想再爲項目添加庫了。如何在Java中使用或不使用Vaadin製作自己的RichTextArea消毒器?
Vaadin框架具有此有用的RichTextArea組件。然而,用戶可能會將有害的JavaScript插入到該字段中,以便在保存之前對字段的值進行消毒。消毒Vaadin RichTextArea
Vaadin這樣做的方式是什麼? Vaadin的書只提到該領域「應該被消毒」,但沒有提供如何實際執行的暗示。在一週前的論壇上詢問沒有得到任何答覆。
我不想再爲項目添加庫了。如何在Java中使用或不使用Vaadin製作自己的RichTextArea消毒器?
最簡單的方法是使用JSOUP,它與Vaadin 7(vaadin-server
取決於它)一起提供。例如: -
Jsoup.clean(richTextArea.getValue(), Whitelist.simpleText())
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()
謝謝!是的,我現在成功地使用了這個功能。 – 2014-12-10 07:19:03
這取決於您將輸出輸入值的位置。 如果您通過RichText或Label組件「顯示」它們,那麼您不必執行任何操作,因爲它們在顯示時會正確轉義。 – 2014-12-08 07:01:04
它將在視圖中顯示並作爲實體Bean的屬性保存在數據庫中(這是描述訂單的消息)。我猜想適用於Rich Text輸入的Vaadin中的合適查看組件只是在readOnly模式下的RichTextArea。 – 2014-12-08 08:55:08
在這種情況下,你不需要做任何事情。因爲vaadin RichTextArea應該正確地轉義JS東西。這並不妨礙最終用戶以但在顯示時不應該執行,只顯示爲。但請注意,如果您將來使用另一個用戶界面在某處顯示它,則會暫時中斷... – 2014-12-08 10:57:57