防止 React 和 NodeJS 中的 XSS 攻击

Preventing XSS attacks in React and NodeJS

我正在开发一个简单的 post 应用程序,使用 React 作为 前端 NodeJS + MySQL 后端。考虑到安全性,我想知道应该在哪里进行用户输入清理 - 在 React form 组件级别的客户端,或者 NodeJS 用户发送数据后的代码?我特别询问 xss 攻击,例如防止 posting 一个 JS 代码作为 post content/body.

在 client-side 数据发送到服务器之前不要对 进行清理 - 客户端可以 运行 随意 JavaScript他们想要的验证码(包括none),并POST到你的服务器,无论他们想要什么。

一个好的方法是尽快安全地进行消毒。这样做将导致您的数据库存储经过清理的值,这意味着安全性将不依赖于在从数据库中呈现某些内容时还记得在客户端上进行清理。不过,在渲染时也对客户端进行清理不会有任何危害 - 它不会增加任何明显的开销,并且会提供一个额外的层,以防您在保存到之前错误地没有清理的端点数据库。

如果您让 React 自己执行 DOM 操作,而不是强制性地手动执行,您就不必担心太多。只要你远离 dangerouslySetInnerHTML 或手动改变 DOM 之类的东西。

话虽这么说,但是当您别无选择时,您可以采取一些措施来使其更加安全,例如使用 DOMPurify 危险地设置内部HTML。

您还可以在将用户生成的内容保存到数据库之前对其进行清理,这不仅可以防止 XSS,还可以防止任何类型的 RCE,如果您知道这些值可能会被其他程序使用并且想要进行防御的话。但是对于 React 中的 XSS 我不会太担心,只有通过 React 中的逃生舱口,你才能设法让自己陷入 XSS 问题。

这里有一篇关于该主题的好书 https://www.stackhawk.com/blog/react-xss-guide-examples-and-prevention