【问题标题】:CodeIgniter auth security modelCodeIgniter 身份验证安全模型
【发布时间】:2011-05-25 12:19:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: php security codeigniter session-cookies


    【解决方案1】:

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

    if_logged_in = true 检查就足够了,因为会话数据存储在服务器端。检查用户代理等内容的原因是为了帮助防止会话劫持,即一个人获取另一个人的会话 ID。

    【讨论】:

    • phpass 做盐,然后用 bcrypt 散列。会话劫持是一个好点。我知道 CI 在会话数据库中跟踪用户代理,但我不太确定它对它有什么作用。值得一试!
    【解决方案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); 再次 您应该对来自服务器的所有输入执行此操作,因为它们不安全。最好的方法是使用白名单而不是黑名单。因为你有可能会错过一些东西。
    • 使用PDO 将sql 注入风险降至最低。
    • 不要将密码以纯文本形式存储在数据库中,而是 hash 它们。我猜这还是有风险的生意。因为最近 gawker/lifehacker 受到了损害(想知道它是如何发生的?)。我猜你的 phpass 很可靠,因为 owasp 也推荐它。
    • 警惕 XSS 攻击。由于清理输入,已经完成
    • CSRF采取措施。例如,如果您可以在用户登录时修改电子邮件地址,这也可能非常危险。下一步是发送电子邮件以重置您的密码并且您的系统被破坏。

    【讨论】:

    • 这都是很好的建议。我只想指出 Codeigniter 已经通过使用内置的 $this->input->post 对象、activerecord 来清理输入以最小化 sql 注入并内置 XSS 过滤(我不确定它是否默认打开)。
    • 你说得对。我过去使用过codeigniter(当时我还经常进行php开发)。但是我不相信 codeigniter 还没有内置 CSRF 保护?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2010-10-04
      相关资源
      最近更新 更多