2

您将如何将 SafeHtml 与链接结合使用?

场景:我们的用户可以输入可能包含链接的无格式文本,例如I like&love http://www.stackoverflow.com. 我们希望在 GWT 中安全地呈现此文本,但使链接可点击,例如I like&amp;love <a="http://www.stackoverflow.com">stackoverflow.com</a>. 除了在 GWT 前端渲染文本外,我们还希望通过电子邮件发送它,链接也应该是可点击的。

到目前为止,我们考虑了以下选项:

  1. 将完整的文本作为 HTML 存储在后端,让前端假定它已正确编码 ( I like&amp;love <a="http://www.stackoverflow.com">stackoverflow.com</a>) -> 引入 XSS 漏洞
  2. 在后端存储纯文本但链接为 HTML ( ) 并在前端I like&love <a="http://www.stackoverflow.com">stackoverflow.com</a>使用HtmlSanitizer
  3. 在后端为链接 ( ) 存储纯文本和特殊编码,I like&love [stackoverflow.com|http://www.stackoverflow.com]并在前端使用自定义 SafeHtml 生成器

对我们来说,第三个选项看起来最干净,但它似乎需要最自定义的代码,因为我们无法利用 GWT 的 SafeHtml 基础架构。

有人可以分享如何最好地解决问题吗?到目前为止我们还没有考虑过其他选择吗?

4

1 回答 1

2

为什么不完全按照用户输入的方式存储文本,并在将其转换为输出时执行任何特殊处理(例如,用于发送电子邮件、创建 PDF 等)。这是最自然的方法,您不必撤消任何特殊处理,例如当您让用户编辑字符串时。

作为一般规则,我总是只为直接传输/存储/输出目标执行编码/转义/转换。偏离这条规则的原因很少,其中之一可能是性能,例如在数据库中缓存转换后的值。(在这些情况下,我认为最好为 DB 字段指定一个特定的名称,例如“text_htmltransformed”——这可以避免“过度转义”,这与不转义一样有害。)

注意:转义/编码不能替代输入验证。

于 2012-11-28T13:12:07.200 回答