3

我已经为 CodeIgniter 构建了一个自定义身份验证系统(我知道有各种可用的 3rd 方库,但这是为了我自己的利益),但我担心我错过了一些明显的东西,可能会导致整个事情失败。

我使用 CI 会话(通过数据库)并加密 cookie 值以进行一些可能毫无意义的混淆。登录通过 SSL 进行(并且 cookie 被修改为仅安全)。我还使用 phpass 对密码进行哈希存储,尽管这在这里并不重要。这部分的某个地方可能存在薄弱环节,但我主要担心的是逐页检查基本上由if is_logged_in = true类型方法及其在会话中的用户名组成。这一点让我很担心,因为它似乎有点太“容易”了。这种方法很脆弱吗?我是否应该计算用户代理或其他任何内容的逐页哈希并确保它们匹配?

任何指针将不胜感激。就像我说的,我知道预先存在的解决方案,但我想在这里学习一些知识:)

4

3 回答 3

3

你提到的一切都很好。但是,我对 phpass 不熟悉。确保当您对密码进行哈希处理时,您使用的是盐。

检查就足够了if_logged_in = true,因为会话数据存储在服务器端。检查诸如用户代理之类的东西的原因是为了帮助防止会话劫持,其中一个人获取另一个人的会话 ID。

于 2010-12-14T19:49:04.117 回答
2

PS:我不是安全专家,所以我更喜欢使用经过安全专家检查的系统:openid、facebook connect、twitter(oauth)、google signin 等

但这是我的清单(我可以考虑):

  • 使用 SSL 确保通过网络发送的密码没有人可以读取您的密码。
  • 您应该清理所有输入($_POST、$_GET、$_SERVER 等)。如果不是局部变量,你应该小心。因此,例如,您应该$_SESSION['is_logged_in']使用此过滤器进行清理 => $var = filter_var($_SESSION['is_logged_in'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); AGAIN您应该对来自服务器的所有输入执行此操作,因为它们不安全。最好的方法是使用白名单而不是黑名单。因为你有可能会错过一些东西。
  • 使用PDO将 sql 注入的风险降至最低。
  • 不要将密码以纯文本形式存储在数据库中,而是对其进行哈希处理。我猜还是有风险的生意。因为最近 gawker/lifehacker 受到了损害(想知道它是如何发生的?)。我猜你的 phpass 很可靠,因为owasp也推荐它。
  • 请注意 XSS 攻击。已经完成,因为对输入进行了清理
  • 对CSRF采取措施。如果您可以在用户登录时修改电子邮件地址,这也可能非常危险。下一步是发送电子邮件以重置您的密码并且您的系统受到损害。
于 2010-12-14T23:01:20.227 回答
0

我对 phpass 不熟悉,但检查它是否使用 MD5,因为如果使用,那么它还不够好。使用 bycrypt http://www.memonic.com/user/pneff/id/1qHCT

于 2011-07-05T16:21:50.583 回答