Php CodeIgniter身份验证安全模型

Php CodeIgniter身份验证安全模型,php,security,codeigniter,session-cookies,Php,Security,Codeigniter,Session Cookies,我已经为CodeIgniter建立了一个自定义的身份验证系统(我知道有各种第三方库可用,但这是为了我自己的利益),但我担心我遗漏了一些明显的东西,可能会使整个事情失败 我使用CI会话(通过数据库)和加密cookie值来进行一些可能毫无意义的混淆。通过SSL进行登录(Cookie被修改为仅安全)。我还使用phpass散列存储密码,尽管这在这里并不重要。这一部分可能有一个薄弱环节,但我主要关心的是,页面间检查基本上包括if is\u logged\u in=true类型方法以及会话中的用户名。这一点

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

我使用CI会话(通过数据库)和加密cookie值来进行一些可能毫无意义的混淆。通过SSL进行登录(Cookie被修改为仅安全)。我还使用phpass散列存储密码,尽管这在这里并不重要。这一部分可能有一个薄弱环节,但我主要关心的是,页面间检查基本上包括
if is\u logged\u in=true
类型方法以及会话中的用户名。这一点与我有关,因为它似乎有点太“容易”。这种方法很脆弱吗?我应该计算一页一页的散列,比如说,用户代理或其他什么,并确保它们匹配吗


任何指点都将不胜感激。正如我所说,我知道已有的解决方案,但我在这里尝试学习:)

你提到的一切都很好。不过,我对phpass并不熟悉。确保在散列密码时,使用的是salt


由于会话数据存储在服务器端,因此只要检查
if\u logged\u in=true就足够了。检查诸如用户代理之类的东西的原因是为了帮助防止会话劫持,即一个人获取另一个人的会话ID。

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

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

  • 使用SSL确保通过网络发送密码时,没有人可以读取您的密码
  • 您应该输入所有内容($\u POST、$\u GET、$\u服务器等)。如果不是局部变量,则应小心。因此,例如,您应该使用此筛选器清理
    $\u会话['is\u logged\u']
    。=>
    $var=filter\u var($\u会话['is\u logged\u'],filter\u VALIDATE\u BOOLEAN,filter\u NULL\u ON\u FAILURE)再次您应该对来自服务器的所有输入执行此操作,因为它们不安全。最好的方法是使用白名单而不是黑名单。因为你可能会错过一些东西
  • 用于最小化sql注入的风险
  • 不要将密码以纯文本形式存储在数据库中,而是将其保存。我想还是有风险的。因为最近gawker/lifehacker受到了欺骗(想知道这是怎么发生的?)。我猜你的phpass相当可靠,因为你也推荐它
  • 警惕XSS攻击。由于消毒输入,已完成
  • 对……采取措施。例如,如果您可以在用户登录时修改电子邮件地址,这也可能非常危险。下一步是发送一封电子邮件来重置您的密码,然后您的系统将被压缩

我不熟悉phpass,但请检查它是否使用MD5,因为如果使用MD5,那么它就不够好。使用bycrypt

phpass进行salt,然后使用bcrypt进行散列。会话劫持是一个很好的观点。我知道CI在会话数据库中跟踪用户代理,但我不太确定它对它做了什么。值得一查!这都是好建议。我只想指出,Codeigniter已经通过使用内置的$this->input->post对象,activerecord来清理输入,以最小化sql注入,并且内置了XSS过滤(我不确定默认情况下是否打开了它)。你是对的。我在过去使用过codeigniter(当时我仍然频繁地进行php开发)。但我认为codeigniter还没有内置CSRF保护?