11.1 逻辑缺陷的本质

Web应用程序中的逻辑缺陷各不相同。它们包括代码中的简单错误,以及几种应用程序核心组件互操作方面的极其复杂的漏洞。有时候,这些缺陷非常明显,很容易发现;但是,有些缺陷可能极其微妙,能够避开最为严格的代码审查或渗透测试。

与SQL注入或跨站点脚本漏洞不同,逻辑缺陷没有共有的“签名”。当然,定义特性是指应用程序执行的逻辑存在某种缺陷。许多时候,逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误。简单来讲,程序员可能这样认为:“如果发生A,就一定会出现B,因此我执行C。”他们并不会提出截然不同的问题:“如果发生X会怎样?”因而没有考虑到假设以外的情形。在许多情况下,这种错误的假设会造成大量的安全漏洞。

近些年来,人们防范常见Web应用程序漏洞的意识已经增强,一些漏洞的出现几率与严重程度也显著降低。然而,鉴于逻辑缺陷的本质,即使是实施安全开发标准、使用代码审查工具或常 规渗透测试,我们仍然无法避免这种缺陷。逻辑缺陷的多样性本质,以及探查与防止它们往往需要从各个不同的角度思考问题,预示着在很长一段时期内,逻辑缺陷仍将大量存在。因此,精明的攻击者会特别注意目标应用程序采用的逻辑方式,设法了解设计者与开发者做出的可能假设,然后考虑如何攻破这些假设。