CodeIgniter auth安全模型

时间:2010-12-14 19:42:43

标签: php security codeigniter session-cookies

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

我使用CI会话(通过数据库)并加密cookie值以进行一些可能毫无意义的混淆。登录通过SSL进行(并且cookie被修改为仅安全)。我也使用phpass来存储密码以进行存储,尽管这在这里并不重要。这个部分可能存在一个薄弱环节,但主要关注的是页面到页面的检查基本上包括if is_logged_in = true类型方法及其在会话中的用户名。这一点让我担心,因为它看起来有点过于“简单”。这种方法很脆弱吗?我应该计算一个逐页的哈希,例如用户代理或其他什么,并确保它们匹配?

任何指针都会非常感激。就像我说的那样,我知道预先存在的解决方案,但我正在努力向我学习一些知识:)

3 个答案:

答案 0 :(得分:3)

你提到的一切都很好。不过我对phpass不熟悉。确保在哈希密码时使用盐。

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

答案 1 :(得分:2)

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

但这是我的清单(我可以想到):

  • 使用SSL确保没有人可以通过网络发送密码。
  • 您应该sanitize所有输入($ _ POST,$ _GET,$ _SERVER等)。如果不是局部变量,你应该小心。例如,您应使用此过滤器=>清理$_SESSION['is_logged_in']$var = filter_var($_SESSION['is_logged_in'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); AGAIN 您应该对来自服务器的所有输入执行此操作,因为它们不安全。最好的方法是使用白名单而不是黑名单。因为有可能你会错过一些东西。
  • 使用PDO来最小化sql注入的风险。
  • 不要以明文形式将密码存储在数据库中,而应将hash密码存储在数据库中。我猜,仍然存在风险。因为最近gawker / lifehacker已被压制(想知道它会如何发生?)。我想你的phpass非常扎实,因为owasp也推荐它。
  • 请注意XSS攻击。已经因为消毒输入而完成了
  • 针对CSRF采取措施。如果您可以在用户登录时修改电子邮件地址,这也可能非常危险。下一步是发送电子邮件重置您的密码,系统就会受到影响。

答案 2 :(得分:0)

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