如何防止服务器响应被用户修改?

Posted

技术标签:

【中文标题】如何防止服务器响应被用户修改?【英文标题】:How to prevent response from the server modify by users? 【发布时间】:2021-09-21 18:59:19 【问题描述】:

我已经使用 spring、java 和 angular 构建了一个系统。当用户成功登录系统后,后端将获取特定用户的角色列表。然后,我意识到来自服务器的响应可以在到达用户之前修改。因此,用户有可能为自己添加更多角色并执行非法操作。

例如: 用户 A 应该只有查看数据的角色。但是当 API 调用后端获取角色时,用户会截取服务器的响应并添加 modify role 给自己。现在用户可以看到修改按钮并开始修改。

有什么办法可以防止这种情况发生吗?

【问题讨论】:

你无法阻止它的发生,所以你必须让它变得无关紧要——服务器应该信任客户端在发出请求时声称它拥有的角色。您不能依靠禁用 UI 中的按钮来保护您的数据。 你可以看看 JSON Web Tokens (JWT),它可能支持类似的东西。您基本上会在令牌的有效负载中发送声明,然后客户端将令牌发送回服务器。但是,在信任 JWT 之前,服务器会对其进行验证,即它使用密钥从令牌创建哈希,并将其与之前创建并发送给客户端的哈希进行比较(并且可能还会在内部存储该哈希)。 是的,我已将 Bearer Token 用于身份验证部分 【参考方案1】:

让后端检查每个请求中的用户角色。我的意思是,如果您的用户请求一个操作(具有修改的角色),您总是检查用户是否具有有效的令牌以及他们的角色(保存在您的数据库中)是否正确。这种方式与用户发送给您无关,您始终确认该操作是否允许。

在这种情况下,做一些非法行为的唯一方法是拥有其他用户访问令牌,但这是另一个安全问题。

【讨论】:

这是否意味着我需要在系统中的每个 Controller 上实现角色检查? 我不这么认为。我的意思是,您可以检查角色以显示或隐藏应用程序的某些部分,但有关允许的用户操作的真正检查必须始终在后端。

以上是关于如何防止服务器响应被用户修改?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止签名令牌用户通过浏览器开发工具访问 API 响应?

如何防止 wcf 在响应中添加转义字符?

防止空 JSON 响应被映射 RestKit 0.22.0

IOS - 如何防止后台按钮被点击?

如何防止按钮双击

常用服务器响应面整理