2011-06-20 78 views
1

我想澄清什么是安全Web登录的一些最佳实践,以及进一步持续登录用于对Active Directory进行身份验证的PHP应用程序。在PHP Web应用程序中安全登录的最佳做法是什么?

  1. 在登录时,实现Post-Redirect-Get模型是否有意义?将密码存储在$_SESSION可能不是一个好主意。

  2. 验证后,检查是否将特定的$_SESSION字段设置为检查用户是否登录的有效且安全的方法?

回答

1

在任何时间点以纯文本形式存储密码并不是一个好主意。

1)我不推荐登录页面的PRG模型。可能发生的最糟糕的事情是该人登录了两次。这并不坏。

存储在$ _SESSION中的数据通常不能被客户端读取。它们存储在恶意雇员或黑客可能访问它们的服务器上。

2)身份验证后,可以检查会话以确定是否有人登录。有人可能会欺骗别人的会话ID,但只要您运行SSL,其可能性很小。我建议将IP,用户代理和其他可以轻松获取的信息存储在$ _SERVER变量中,并且有时或每次都进行比较。为了减少某人侵入其他人的会话ID的可能性。

在登录时重新生成会话ID对我来说没有多大意义,尽管我不知道您的具体情况。我的建议是在退出时简单地重新生成它。此外,如果您愿意,您可以在会话中添加超时功能。

+0

谢谢你的建议。我正在考虑PRG模型,基于这样一个事实,即如果用户点击某个东西,然后使用浏览器上的后退按钮,它会发出需要重新发布信息的声音。不过,我想我可以验证然后重定向。 – Charx

+0

会话ID重新生成用于防止用户使用在未记录模式下使用HTTP的会话ID。现在他已经登录,重要的是他运行的SSL会话ID与以前不一样,否则SSL模式将无法保护任何新内容。 – regilero

+0

@regilero - 这是有道理的。虽然,如果你要在你的网站上使用SSL,为什么不使用它?我发现在SSL和非SSL之间来回切换的问题比我看到问题/从常量SSL滞后的问题要多得多。 – evan

1

您应该只存储一些内容来区分匿名用户和登录用户,如会话中的is_valid关键字。

这意味着任何人捕获会话ID(这是每个请求明确发送的cookie值)将获得会话。这被称为会话劫持,现在是你唯一应该担心的事情。

防止这种情况的方法是在登录时处理HTTPS中的所有连接用户页面...或者捕获noeone会进行XSS攻击或者破解您的用户wifi热点以获取会话ID。

事实上,他们还有其他一些方法,比如存储客户端浏览器的某种签名(用户代理,也许IP--可能会在移动代理,插件列表等方面存在问题),并且使这是一个很好的散列。将其存储在cookie中并且有时会检查它。 编辑:你可以检查我的答案this question以及一些方法来跟踪&识别一个用户浏览器,可以用来确保会话仍然由同一个用户使用。

从不在会话文件中存储密码,从不存储密码不通。

相关问题