2010-03-10 98 views
2

我是PHP的新手,试图让我的头脑安全。php:保护敏感页面功能

我有一个管理页面,可以访问某些管理任务。现在,它允许您使用某些种子数据重新填充数据库表。

要访问管理页面,您首先需要登录。目前,登录未通过https(即将推出)。

如果您进行身份验证,则会将令牌写入$ _SESSION中。在每个管理页面中,都会检查令牌。如果无效,该页面将重定向到登录页面。

我的问题:

这是在PHP中“锁定”下敏感的管理任务的正确方法?检查$ _SESSION变量中的值?我还应该做些什么?

回答

3

这几乎是标准的做法。根据用户数据库/密码文件/其他认证数据对用户进行认证,将认证状态存储在会话变量中,并最终检查每次用户尝试进行需要授权的操作时是否正确设置会话变量。

+0

酷豆。谢谢! – Alan 2010-03-10 09:14:06

1

会话ID通常作为cookie存储在客户端。如果有人窃取cookie,他们可以劫持会话。即使您使用安全连接进行登录,稍后,不安全的请求也会通过线路发送,并且无论加密通信如何,都可以使用任何XSS漏洞捕获会话cookie。使用session_set_cookie_params来限制cookie发送到的页面的子域和路径。

您可以尝试使用非欺骗性客户端数据来检测劫持。由于您无法控制协议,因此只有这样的数据才是远程IP,尽管攻击者可以在欺骗IP时进行盲目攻击。但是,这并不能防止与有效用户位于同一NAT后面的劫持程序,并且在代理请求方面存在问题。

你或许可以用HTTP digest access authentication解决一些问题。这是一种挑战 - 响应身份验证协议,因此可以在没有协议级加密的情况下工作。但是,它基于已知弱点的MD5。考虑到挑战的生命,这可能不是问题。摘要认证容易受到中间人攻击。

1

如果您需要更细粒度的控制级别,您可以根据Access Control Lists查看角色。通过这种方式,通过身份验证的用户可以根据您提供的角色来授予或拒绝访问应用程序的某些部分。这是常规密码认证之外的附加安全措施。

如果您只有一位用户,例如管理员,ACL虽然是矫枉过正。