防止 React 和 NodeJS 中的 XSS 攻击

问题描述 投票:0回答:2

我正在开发一个简单的后期应用程序,使用

React
作为 前端,使用
NodeJS
+
MySQL
作为后端。考虑到安全性,我想知道用户输入清理应该在哪里进行 - 在客户端的
React
form 组件级别上,还是在用户发送数据后在服务器端的
NodeJS
代码中?我特别询问
xss
攻击,例如防止将
JS
代码作为帖子内容/正文发布。

node.js reactjs security xss
2个回答
2
投票

在数据发送到服务器之前不要在客户端进行清理 - 客户端可以自由运行他们想要的任何 JavaScript 验证代码(包括没有),并可以将他们想要的任何内容 POST 到您的服务器。

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


0
投票
如果你让 React 自己进行 DOM 操作,而不是强制地手动操作,那么你就不用担心太多。只要您远离

dangerouslySetInnerHTML 或手动改变 DOM 之类的事情。

话虽如此,当您没有危险的SetInnerHTML之外的其他选择时,您可以采用一些方法来使其更安全,例如使用

DOMPurify

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

这是关于该主题的好读物

https://www.stackhawk.com/blog/react-xss-guide-examples-and-prevention

© www.soinside.com 2019 - 2024. All rights reserved.