消毒Vaadin RichTextArea

Ste*_*ers 2 javascript java security sanitization vaadin

Vaadin框架有这个有用的RichTextArea组件.但是,用户可以将有害的javascript插入到此字段中,以便在保存之前对字段的值进行清理.

Vaadin这样做的方式是什么?Vaadin的书只提到该领域"应该消毒",但没有暗示如何实际做到这一点.一周前在论坛上询问没有得到任何回复.

为此,我不想再为项目添加库.如果使用或不使用Vaadin,如何在Java中制作自己的RichTextArea消毒剂?

cfr*_*ick 5

最简单的方法是使用附带Vaadin 7的JSoup(vaadin-server取决于它).例如:

Jsoup.clean(richTextArea.getValue(), Whitelist.simpleText())
Run Code Online (Sandbox Code Playgroud)

看到 Jsoup.clean

public static String clean(String bodyHtml, Whitelist whitelist)
Run Code Online (Sandbox Code Playgroud)

通过解析输入HTML并通过允许的标记和属性的白名单对其进行过滤,从不受信任的输入HTML中获取安全的HTML.

参数:

bodyHtml - 输入不受信任的HTML(正文片段)

whitelist - 允许的HTML元素的白名单

返回:

安全的HTML(正文片段)

Whitelist

public class Whitelist extends Object
Run Code Online (Sandbox Code Playgroud)

白名单定义允许通过清理器的HTML(元素和属性).其他一切都被删除了.

从其中一个默认值开始:

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