A01:2025 - 失效的访问控制

💡 学习提示: 本文档介绍 OWASP Top 10 A01 - 失效的访问控制,这是 2025 年排名第一的 Web 应用安全风险。

⚠️ 法律声明: 本文档仅供学习和授权测试使用。


📋 风险概述

失效的访问控制 (Broken Access Control) 是指攻击者能够绕过系统的访问控制机制,访问未授权的功能或数据。这是 OWASP Top 10:2025 中排名第一的安全风险。

🔴 危害等级:严重

项目 说明
发生率 3.81% (最高)
平均影响 7.81/10
最大影响 9.67/10
漏洞数量 318,433

🎯 常见场景

1. 越权访问 (Privilege Escalation)

普通用户 → 访问管理员功能
用户 A → 访问用户 B 的数据

2. 目录遍历 (Path Traversal)

# 攻击示例
GET /files?name=../../../etc/passwd
GET /download?file=....//....//config.ini

3. 未授权的 API 调用

# 未验证权限直接调用 API
DELETE /api/users/123
PUT /api/admin/settings

4. 前端访问控制

// ❌ 错误:仅在前端隐藏,未在后端验证
if (user.role === 'admin') {
  showAdminButton();
}
// 攻击者可直接调用 API

⚠️ 典型漏洞

漏洞 1: IDOR (不安全的直接对象引用)

# 攻击者修改 URL 中的 ID 访问他人数据
https://example.com/account/123  → 自己的账户
https://example.com/account/124  → 他人的账户 ❌

漏洞 2: 缺少权限检查

# ❌ 错误示例
@app.route('/admin/delete_user/<user_id>')
def delete_user(user_id):
    # 未检查当前用户是否为管理员
    db.delete_user(user_id)
    return "Deleted"

漏洞 3: 硬编码访问控制

# ❌ 错误:依赖客户端传来的角色
role = request.json.get('role')  # 可被篡改
if role == 'admin':
    grant_admin_access()

🛡️ 防御方法

✅ 1. 实施最小权限原则

# ✅ 正确:基于角色的访问控制
@require_role('admin')
def delete_user(user_id):
    db.delete_user(user_id)

✅ 2. 服务端验证

# ✅ 正确:在服务端验证权限
def get_account(user_id, current_user):
    if current_user.id != user_id and not current_user.is_admin:
        raise PermissionDenied()
    return db.get_account(user_id)

✅ 3. 使用安全的框架

# ✅ 使用 Django 的权限系统
from django.contrib.auth.decorators import permission_required

@permission_required('accounts.delete_user')
def delete_user_view(request, user_id):
    ...

✅ 4. 记录访问控制失败

# ✅ 记录未授权访问尝试
if not user.has_permission('delete'):
    log_security_event(f"Unauthorized delete attempt by {user.id}")
    raise PermissionDenied()

🧪 测试方法

手动测试

  1. 越权测试

    • 使用普通用户账户登录
    • 尝试访问管理员 URL
    • 修改请求参数访问其他用户数据
  2. HTTP 方法测试

    # 尝试未授权的 HTTP 方法
    curl -X DELETE /api/users/123
    curl -X PUT /api/admin/settings
  3. 目录遍历测试

    curl "https://target.com/files?name=../../../etc/passwd"

自动化测试

# 使用 OWASP ZAP 扫描
zap-baseline.py -t https://target.com

# 使用 Burp Suite 进行授权测试

📊 影响评估

业务影响

  • 数据泄露: 未授权访问敏感数据
  • 功能滥用: 执行未授权操作
  • 合规风险: 违反 GDPR、等保等法规

技术影响

  • 系统完整性受损
  • 用户信任度下降
  • 可能导致进一步攻击

🎓 学习资源

推荐阅读

实践练习

  • OWASP Juice Shop - 访问控制挑战
  • PortSwigger Web Security Academy - 访问控制实验室

🔗 参考资料


最后更新:2026-03-10
内容来源:OWASP Top 10:2025 官方文档