【问题标题】:Sanitizing a Vaadin RichTextArea清理 Vaadin RichTextArea
【发布时间】:2014-12-08 06:28:24
【问题描述】:

Vaadin 框架有这个有用的 RichTextArea 组件。然而,用户可能会在此字段中插入有害的 javascript,因此应在保存之前对字段的值进行清理。

Vaadin 的做法是什么?瓦丁之书只提到该字段“应该被清理”,但并未给出如何实际执行的提示。一周前在论坛上提问没有得到任何回复。

我不想为此向项目添加更多库。在有或没有 Vaadin 的情况下,如何用 Java 制作自己的 RichTextArea 消毒剂?

【问题讨论】:

  • 这取决于您将输出输入值的位置。如果您通过 RichText 或 Label 组件“显示”它们,那么您无需执行任何操作,因为它们会在显示时正确转义。
  • 它将显示在视图中并作为实体 Bean 的属性保存在数据库中(这是描述订单的消息)。我猜 Vaadin 中适合富文本输入的查看组件只是只读模式下的 RichTextArea。
  • 在这种情况下,您不需要做任何事情。由于 vaadin RichTextArea 应该正确地转义 JS 的东西。这不会阻止最终用户以 的形式输入 javascript,但在显示时它不应该被执行,只是显示为 。但是请注意,如果您将来在某个地方使用另一个 UI 显示它,那么它可能会中断....
  • 不,你没有完美保存。如果 RTE 被输入恶意代码,该代码将存在于 DOM 中(但处理方式,它不会直接执行),因此可以桥接到存储的 XSS。自己编写而不使用库也肯定会出错。

标签: java javascript security vaadin sanitization


【解决方案1】:

最简单的方法是使用 Vaadin 7 自带的 JSoup(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(正文片段)

Whitelist

public class Whitelist extends Object

白名单定义了哪些 HTML(元素和属性)可以通过清理程序。其他所有内容均已删除。

从默认值之一开始:

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

【讨论】:

  • 谢谢!是的,我现在正在成功使用它。
猜你喜欢
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多