Autorização
Permissões
Segurança
RBAC
ABAC

授权和权限 - 最佳实践基础知识

许多开发人员混淆了两者。您已登录系统(身份验证正常),但您可以删除数据库吗?或者看看CEO的薪水?

授权和权限 - 最佳实践基础知识

身份验证是知道“你是谁”。 授权就是知道“你能做什么”。

许多开发人员混淆了两者。您已登录系统(身份验证正常),但您可以删除[数据库6吗?或者看看CEO的薪水?这就是授权。

管理权限是应用程序安全性中最关键的部分。这里的一个缺陷(访问控制损坏)是 OWASP 排名中排名第一的漏洞。

在本文中,我们将介绍实现强大的权限系统的基础知识和最佳实践。

访问控制模型

有多种方法可以对用户说“是”或“否”。

1.RBAC(基于角色的访问控制)

最常见的。您创建“角色”。

  • 管理员:你可以做任何事情。
  • 编辑:可以创建和编辑帖子。
  • 读者:您可以阅读。 您将角色分配给用户 (0)。代码检查:1。
  • 优点:易于理解和实施。
  • 缺点:它是刚性的。如果我希望特定编辑能够删除帖子,但只能删除他自己的帖子,该怎么办?

2.ABAC(基于属性的访问控制)

更细化、更强大。它基于属性。 *“允许编辑 IF (user.id == post.author_id) AND (时间 < 18:00)”。

  • 优点:无限的灵活性。
  • 缺点:实现复杂性。

3.PBAC(基于策略的访问控制)

用自然语言或单独的代码定义策略。

  • 示例:AWS IAM 策略。

最小权限原则

这是黄金法则: 仅授予用户完成工作所需的最低权限。不多也不少。

  • 如果某个服务只需要读取数据,则不要授予其写入权限。
  • 如果开发人员只需要查看日志,则不要授予对生产数据库的访问权限。

这减少了“攻击面”。如果该用户的帐户被黑客入侵,造成的损失是有限的。

在哪里检查授权?

始终在后端。 如果用户不是管理员,许多现代应用程序会隐藏前端的“删除”按钮。这只是用户体验,而不是安全。 攻击者可以直接调用API2。 后端必须检查每个请求的权限。

IDOR(不安全的直接对象引用)

经典的失败。 网址为3。我看到了我的发票。 我将 URL 更改为 4。我看到了邻居的账单。 这是伊多尔。 更正:后端应检查:“登录用户是否是发票 101 的所有者?”。如果不是,则返回 403 Forbidden。

结论

授权不是最后添加的东西。它必须在[数据库8]和API的架构中进行设计。使用成熟的库(如 JS 或 Pundit 中的 CASL),而不是用分散的 5 来弄乱你的代码。安全就是控制。

另请阅读

  • [应用程序中的授权和权限:安全访问控制9
  • [授权和权限:防止未经授权的访问的最佳实践10
  • 【Deno简介:现代开发实用指南11
  • [云原生安全:保护 Kubernetes 基础设施12
  • [应用程序中的身份验证 - 使用清单的最佳实践13
  • [应用程序身份验证:完整的安全性和用户体验指南14