【问题标题】:Is it okay to handle user permissions client side only in a web application?是否可以仅在 Web 应用程序中处理用户权限客户端?
【发布时间】:2021-11-18 04:18:06
【问题描述】:

我正在为体育联盟构建一个网络应用程序。联赛简介页面由用户创建,他们可以在其中管理联赛(添加球队、批准最终成绩、发布公告等)。创建此页面的用户应该是唯一能够执行这些操作的用户。其他用户可以访问个人资料,意思是只读。

在数据库的leagues 表中有一个名为owner_id 的外键列引用users 表id 列。

在用户想要将球队添加到联赛的场景中,是否可以在客户端执行此代码?这将是检查用户是否被授权的唯一代码。我还需要服务器端代码吗?如果不打开另一个数据库连接,我将如何做到这一点?

async function AddTeam(){
    if(user.id === league.owner_id){
      ///api call
    }
  }

用户 id 在登录时可用。联赛 owner_id 在访问联赛资料页面时可用。

【问题讨论】:

  • 你必须在服务器端进行。客户端代码完全掌握在用户手中,因此假设恶意行为者可以以任何可能的方式对其进行更改,包括将修改后的请求发送到后端。
  • @Nick 这是有道理的。出于 UI 的目的,我猜可以进行简单的 if 语句检查,对吧?
  • 是的,if 语句非常适合 UI,只要确保您保护后端的东西!
  • @Nick 如果我在请求中发送用户 id 和联赛 owner_id 以在后端进行比较,如果他们知道某事的用户 id/owner_id,是什么阻止了某人修改请求他们想篡改?因此,我不认为在后端执行此操作比在前端执行此操作更安全。
  • 您不应根据用户提交的任何信息验证用户的身份。您应该根据 cookie 或 JWT 或您的后端可用于查找用户身份的其他令牌来获取它

标签: reactjs permissions authorization roles


【解决方案1】:

选项1)最好在服务器端使用node js处理用户权限。

  • like create node API 将用户信息数据从 UI 发布到节点 API。
  • 在节点 API 中调用 Main API 进行数据库更新,获取数据。

在 API 调用请求中添加标头,说明更新数据库的用户是谁。

添加授权标头以便更好地跟踪谁在更新数据。

选项2)您可以使用oAuth实现并将范围(get,post,put,delete)添加到用户以进行更新数据库或获取数据的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2013-10-16
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多