保护 NodeJS RESTful API 和 React 客户端应用程序

Posted

技术标签:

【中文标题】保护 NodeJS RESTful API 和 React 客户端应用程序【英文标题】:Securing NodeJS RESTful API and React client app 【发布时间】:2020-10-24 07:23:03 【问题描述】:

我有一个在 NodeJS 中构建的后端 RESTful API 和一个在 React JS(NextJS) 中的前端应用程序,两者都托管在 AWS 上。客户端和服务器使用 JWT 令牌进行通信。 我想确保客户端应用程序和服务器端应用程序都高度安全。

我做了什么:

我对客户端和服务器都使用 HTTPS 将客户端 React 应用 IP 地址列入白名单,以便只有客户端 React 应用可以与服务器应用通信。这是在 AWS 安全组中完成的 在我的服务器 Node.JS 应用程序中使用 cors,将客户端 IP 地址再次列入白名单,作为对 1 号的补充 使用 AWS WAF 保护后端 NodeJS 应用程序, 在 NodeJS 服务器后端 API 中使用 helmet 请确保 JWT 令牌仅持续 7 天,它将失效,用户需要重新登录才能获取新令牌。

我看过并使用过的答案:

    How to secure client app (react) and API communication

    根据:RESTful Authentication 我在 HTTP 标头中使用 Token(例如 OAuth 2.0 + JWT),这是我为每个客户端请求发送的

    使用刷新令牌:Refresh Token Jsonwebtoken

    我关心的是什么,我需要一些帮助:

    1.既然 JWT 令牌是服务器验证客户端的方式,那么 JWT 通信是否安全?我还可以采取其他措施来提高 JWT 的安全性吗?

    2。这个应用架构是否足够安全?

    3.我还可以做些什么来提高它的安全性,因为我真的很担心并希望确保它非常安全。

    4.我应该加密从客户端发送到服务器的 JSON 有效负载吗?因为这在 XHR 下的任何浏览器网络选项卡中都可见,所以我将用户名和密码作为登录负载发送。

我最关心的是安全性,因为我已经在应用程序中集成了条带支付,而且我还存储了一些敏感数据。

任何建议都将受到高度赞赏,这是我第一次部署生产应用程序。

【问题讨论】:

【参考方案1】:

根据你所做的,应用程序必须非常安全......除了我想添加一些东西......

    确保令牌已过期并使用刷新令牌颁发新令牌。存储在客户端的 jwt 可能容易受到中间人攻击。 (为了获得更高的性能,请使用 redis 来存储刷新令牌......查看更多内容) 如果您使用 https,则该请求将仅对客户端的浏览器可见,而对网络中的任何嗅探器均不可见(检查是否能够在诸如 wireshark 等嗅探工具中看到加密的有效负载...以验证https 已使用)。因此,没有必要再进行任何加密。这会降低 api 服务器的性能。

【讨论】:

以上是关于保护 NodeJS RESTful API 和 React 客户端应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 RESTful 服务保护跨域的 API 调用

使用 restful API 在 nodejs 上实现微风

Nodejs RESTFul架构实践之api篇(转)

如何在 reactjs 中向 nodejs RESTful API 发出 POST 请求

NodeJS RESTful API - 如何正确处理“未定义”请求变量?

nodejs + mongodb 编写 restful 风格博客 api