Essential PHP Security -PHP安全基础

第七章 验证与授权

Top  Previous  Next

                                                                     第七章 验证与授权

  很多Web应用被其糟糕的身份验证与授权机制所困扰。本章主要讨论相关这些机制的漏洞,传授一些帮助你不犯通病的方法。我将通过一些例子进一步说明这些方法,但请注意不要把这些示例与其上下文割裂开来看,理解其中包含的原则和方法是很重要的。只有到那个时候你才能对它们进行正确运用。

  通过验证我们可以确定一个用户的身份。典型的做法是简单地使用用户名和密码进行检查。这样我们就能确定登录用户是一个授权用户。

  身份验证,常被称为访问控制,是一种你能用来保护对受限资源的访问及确认一个用户是否有权访问特定资源的方法。例如,很多WEB应用会有只对授权用户开放的资源、只对系统管理员开放的资源以及对所有用户开放的资源。

  产生访问控制漏洞的一个主要原因是粗心大意——在Web应用中这一部分程序是最少被关心和注意的。在开发中管理功能和访问控制常常是最后考虑的,而且一般是从授权用户的出发点去考虑和编写,并没有考虑攻击者可能会使用的手段。对授权用户的信任远远高过匿名用户,但是如果你的管理功能是能通过URL直接公开访问的话,就会成为攻击者钟爱的目标。疏忽是你首要的大敌。

  为达到安全的目的,需要在设计时就综合考虑访问控制。它不应只是一个现有应用的门闩,尽管有时可能是这样的,但该流程是非常容易发生错误的,同时访问控制中的错误必然导致安全漏洞。

  访问控制还需要一个可靠的识别机制。毕竟,如果一个攻击者能伪装成一个合法用户,所有的基于用户识别的访问控制是无效的。因此,你要考虑到攻击的情况,例如会话劫持。关于会话相关的攻击手段请参见第四章。

  本章涉及相关验证与授权中通常需要关注的四个方面:暴力攻击,密码嗅探,重播攻击以及永久登录。