首页 > 解决方案 > 从 Firebase 提供的已清理用户内容的安全性

问题描述

首先我会分情况描述:

我正在使用 angular 和 firebase 构建应用程序。Angular 客户端有输入,用户可以在其中编写一些自定义内容,我希望这些内容能够到达 text aka markdown/html 以允许链接粗体斜体等...

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

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

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

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

如何处理?

由于 firebase 仅将信息存储在数据库中,因此我只能在最终用户 Angular 客户端中保护我的应用程序。在这种情况下,当用户消息从 firebase 到达时对其进行清理是个好主意吗?它安全吗?在服务之前检查内容时,是否有欺骗角度应用程序的方法?如果是,你能告诉我例子并告诉我如何处理这种情况吗?

标签: angularfirebasesecurityfirebase-realtime-databasexss

解决方案


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


推荐阅读