java - 使用 SafeHtml 进行 anchor

标签 java gwt xss

您将如何将 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 基础设施。

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

最佳答案

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

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

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

关于java - 使用 SafeHtml 进行 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13601858/

相关文章:

css - 什么是安全和不安全的 css 样式(我们会过滤掉什么,我们会允许什么)?

java - MediaPlayer.create() 总是返回 null

java - Servlet 3.0 async 支持的缺点

gwt - 如何在 GWT 中禁用菜单栏

c# - 如何将 GWT 与 Visual Studio 结合使用来创建 ASP.NET 网站?

php - 我是否应该将 ENT_QUOTES 与 htmlspecialchars 一起使用

css - 在将 Select 标记的文本颜色设置为黑色的 iframe 中编辑 CSS?

java - 如何将图像插入到我的 Java 小程序中?

java - 烫 'multiple map()'优化

gwt - SuggestBox 覆盖 addSelectionHandler