从firebase提供的已清理用户内容的安全性

时间:2018-05-23 13:56:30

标签: angular firebase security firebase-realtime-database xss

首先,我将按案例描述:

我正在使用angular和firebase构建app。 Angular客户端有输入,用户可以在其中编写一些自定义内容,我希望此内容能够到达文本 aka markdown / html以允许links粗体,< em> italic 等...

此输入的内容保存在firebase数据库中,稍后再加载回其他用户 - 基本上您可以将此想象为堆栈溢出问题的简单情况。

我们知道客户端提供的任何内容都不安全,这意味着如果后端不清理此消息的内容,则可能会产生XSS攻击。 从firebase提供任何消息都是危险的,但是当我使用尖括号时,我的{{ message }}的内容应该被转义并且消息如下: my message and <script> evilScript(); </script>应按原样提供。

现在,假设我们不使用纯文本消息,而是使用html或markdown。在这种情况下,看到如下内容是完全正常的:

  • **hello** it is me
  • <strong>hello</strong> it is me

但是这次我无法按原样服务。我不能允许提供纯HTML,因为这对最终用户来说是不安全的。在降价的情况下,我必须首先将其转换为html,所以这几乎是相同的情况 (除了我只做一个额外的步骤)。简单地说,在这种情况下,我必须首先清理消息。

如何处理?

由于firebase只存储数据库中的信息,因此我只能在最终用户角度客户端中保护我的应用程序。在这种情况下,最好在用户消息从firebase到达时清理它们吗?它安全吗? 在服务之前检查内容时,有没有欺骗角度应用程序?如果是的话,你能给我看一些例子并告诉我如何处理这个案子吗?

1 个答案:

答案 0 :(得分:2)

在将内容添加到DOM(通过角度)之前,通过DOMPurify运行内容。它将确保HTML是静态的(不包含活动代码),并且DOMPurify是由一些世界上最好的XSS研究人员创建的。 https://github.com/cure53/DOMPurify