2014-12-08 62 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