第8章
攻击访问控制


逻辑上讲,应用程序核心安全机制的访问控制建立在验证和会话管理之上。到现在为止,我们已经了解了应用程序如何首先核实用户的身份,然后确认它收到的某个特殊的请求序列由该用户提出。应用程序之所以需要这样做,至少从安全上讲,是因为它必须决定是否允许某个请求执行特定的操作或访问它请求的资源。访问控制是应用程序的一个重要防御机制,因为它们负责做出这些关键决定。如果访问控制存在缺陷,攻击者往往能够攻破整个应用程序,控制其管理功能并访问属于其他用户的敏感数据。

如第1章所述,不完善的访问控制中最常见的Web应用程序漏洞,影响了我们最近测试的71%的应用程序。我们发现应用程序做出一切努力执行稳定的验证与会话管理机制,但由于没有在它们上面建立任何有效的访问控制,因而浪费了这方面的投资,这种情况非常常见。这些漏洞如此普遍的一个原因在于,需要对每一个请求,以及特殊用户在特定时刻尝试对资源执行的每一项操作执行访问控制检查。而且,与许多其他类型的控制不同,这一设计决策需要由人做出,而无法采用技术来解决。

访问控制漏洞的概念非常简单:应用程序允许攻击者执行某种攻击者没有资格执行的操作。各种漏洞之间的差异实际上可归结为这些核心漏洞表现方式上的不同,以及检测它们所需要使用的技巧之间的差异。我们将描述所有这些技巧,讨论如何利用应用程序的各种不同行为,执行未授权操作并访问受保护的数据。