首先我会分情况描述:
我正在使用 angular 和 firebase 构建应用程序。Angular 客户端有输入,用户可以在其中编写一些自定义内容,我希望这些内容能够到达 text aka markdown/html 以允许链接、粗体、斜体等...
此输入的内容保存在 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 仅将信息存储在数据库中,因此我只能在最终用户 Angular 客户端中保护我的应用程序。在这种情况下,当用户消息从 firebase 到达时对其进行清理是个好主意吗?它安全吗?在服务之前检查内容时,是否有欺骗角度应用程序的方法?如果是,你能告诉我例子并告诉我如何处理这种情况吗?