服务器的响应操作

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

我正在开发一个 Web 应用程序(使用 React 的 SPA),它有两个视图:UserAdmin。如果用户不是管理员,我不希望看到 Admin 视图,但攻击者可以通过使用 Server’s Response Manipulation 攻击看到该视图。目前,该应用程序的工作流程如下:

  1. 客户端进行身份验证。
  2. 认证成功后,认证服务器将会话cookie存储在客户端上。
  3. 前端向后端发出请求,以便后端获取用户的信息,包括角色。
  4. 根据收到的响应呈现用户或管理员视图。

攻击者可以在步骤3和4中拦截服务器的响应,并将角色更改为Admin,从而使FE呈现管理视图。也许我不应该在服务器响应上传递角色,但我不确定存在什么机制来实现这一点。

另请注意,攻击者无法在管理数据上查看/执行任何操作,因为服务器使用提供的会话验证用户角色,因此从技术上讲,服务器和数据是安全的。

期望是:

  1. 前端应该能够安全地获取用户的角色。
  2. 客户端不应该能够以任何形式更改其角色。
node.js reactjs http security
1个回答
0
投票

首先,你需要始终考虑的事情之一是永远不要相信前端。攻击者可以轻松地以各种方式操纵它,主要是因为它已经在用户计算机中,可能容易受到攻击,所以让我们排除这个变量,后端需要受到保护本身。

如果您正在编写SPA(单页应用程序,攻击者始终可以更改源代码以绕过受保护的客户端页面,因此您可以做的是:

  • A:要有一个客户端“中间件”来检查用户访问令牌是否存在,如果存在,则对其进行解码并从中检索用户角色,如果它是
    ADMIN 则允许它进入受保护的路径
    ,如果不是,请将用户重定向/移动到另一个路径。最流行的方法是使用JWTs(Json Web Tokens),我建议看一下;另外,您可以对某些路径应用延迟加载,但这比真正的解决方案更像是一种改进,因为攻击者总是可以做一些事情来获取 SPA 代码。接下来将在 B 上解决一个稳健的解决方案;
  • B:确保后端始终使用敏感路由的签名来验证访问令牌。这就是事情变得有趣的地方,因为前端可能能够访问页面,但无法从后端获取任何敏感数据,因为后端验证了攻击者请求并注意到令牌中的数据操作(签名验证失败)或可疑请求(不同的IP、国家等);

如果您不编写 SPA,那么正如 Carcigenicate 提到的,您可以选择立即向客户端发送正确的页面,但也要记住确保令牌不被篡改。

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