👑 OWASP 第一名!深入解析失效的访问控制 (Broken Access Control)

大家好! 👋 今天,我们将轻松而详细地探讨OWASP Top 10 2021中备受瞩目的第一名——失效的访问控制 (Broken Access Control),这是每位开发者和安全负责人必须了解的。它从2017年的第5位跃升至第1位,足见其重要性和普遍性,请务必集中注意力!

🤔 访问控制?那是什么?

最简单的比喻,它就像一把“钥匙”。🔑

  • 房主:拥有可以进入所有房间的主钥匙。(管理员)
  • 家人:拥有自己房间、客厅和卫生间的钥匙。(普通用户)
  • 外来者:没有任何钥匙,无法进入房子。(未经认证的用户)

正如其名,访问控制(Access Control)是安全的核心原则,它通过确认用户身份及其权限,来控制用户只能执行被允许的操作。也就是说,它是一个决定“你可以打开这扇门”或“你不能按下这个按钮”的系统。

“失效的访问控制”正是指这个钥匙系统出了故障。这会导致可怕的情况发生,比如外来者随意进入我的房间,或者普通用户进入只有管理员才能访问的秘密空间。😱


🚨 为什么会成为第一名?

根据OWASP的报告,在94%的被分析应用程序中都发现了某种形式的失效访问控制漏洞。这意味着几乎所有的Web应用程序都面临这个问题。这通常是因为用户认证(登录)功能做得很好,但在登录之后,却常常忽略了对每个页面上每个用户权限进行仔细检查的逻辑。


🕵️‍♀️ 失效访问控制的典型类型

在什么情况下,我们可以说访问控制“失效”了呢?让我们通过典型的案例来了解一下。

1. 不安全的直接对象引用 (IDOR – Insecure Direct Object References)

这是最常见和最直观的类型。它是一种通过更改URL地址或参数中的简单数字(ID)来访问他人信息的攻击。

  • 攻击场景 🧑‍💻
  1. 黑客查看自己的帖子。URL是 。
  2. 出于好奇,黑客将URL中的id值改为101并发送请求。 ()
  3. 如果服务器不验证此请求是否为合法用户的请求,则101号帖子(他人的私密文章)将直接暴露!

2. 权限提升 (Privilege Escalation)

指用户获取了比其原有权限更高的权限。主要分为两种。

  • 垂直权限提升 (Vertical Privilege Escalation) 👩‍💼 ➡️ 👑
  • 普通用户获得管理员(Admin)权限的情况。
  • 示例:发现管理员页面URL()并直接访问,由于没有进行权限检查,管理员页面直接打开。
  • 水平权限提升 (Horizontal Privilege Escalation) 👤 ➡️ 👤
  • 访问同级别其他用户信息的情况。
  • 示例:上面解释的IDOR就是典型的水平权限提升攻击。通过从user/123访问user/124来查看其他用户的信息。

3. 功能级别访问控制缺失

用户界面(UI)中隐藏了特定按钮或菜单以阻止访问,但服务器端并未阻止对该功能的访问。

  • 攻击场景 😈
  1. 普通用户看不到“删除用户”按钮。
  2. 但黑客通过开发者工具找到了“删除用户”功能的API地址()。
  3. 当直接调用此地址时,如果服务器不验证请求用户是否为管理员,则50号用户将被直接删除。

🛡️ 如何阻止它? (防御方法)

阻止失效访问控制的核心原则很简单:“不信任任何人,怀疑所有请求!”

  1. 默认拒绝 (Deny by Default) 🔒 这是最重要的原则。在明确允许特定权限之前,所有访问都应默认被阻止。可以简单理解为白名单方式。
  2. 实现集中式访问控制逻辑 ⚙️ 将权限检查逻辑分散各处容易出错。应在一个地方管理权限,并设计所有请求都通过这个集中式逻辑。
  3. 在服务器端!对所有请求!进行权限检查 🖥️✔️ 在用户可见的屏幕(客户端)上隐藏任何东西都没有意义。当所有请求到达服务器时,必须在服务器端再次验证该用户是否有权执行此操作。
  4. 最小权限原则 (Principle of Least Privilege) 仅授予用户必需的最小权限。普通用户完全没有必要访问管理员功能。
  5. 使用难以猜测的ID 代替1、2、3等顺序数字ID,使用a1b2c3d4-e5f6-….等复杂且难以猜测的UUID(Universally Unique Identifier)可以大大增加IDOR攻击的难度。

✨ 总结

失效的访问控制可能源于非常微小的错误,但其后果可能极其严重,从个人信息泄露到系统被完全控制。‘这点小事没关系吧’这种麻痹大意的想法是最大的敌人。

从今天开始,对于你所开发的每个功能,养成总是问自己‘发送此请求的用户真的有权执行此操作吗?’的习惯如何?这将是构建更安全网络世界的第一步!


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注