【问题标题】:cookies system - securitycookie 系统 - 安全性
【发布时间】:2011-11-05 02:37:44
【问题描述】:

我有一种方法可以检查用户名和密码(哈希+盐)是否正确。之后,如果用户有访问权限,我会这样做:

 if(isset($remember) && $remember == '1') {
        setcookie('email', $email,  time()+60*60*24*100);
    }
    else {
        setcookie('email', $email, time()+3600);
    }

我的问题是关于安全问题。上面的代码不安全?需要签名之类的东西吗?

例如:

$user_email = $email;
$hash = sha1(rand(0,500).microtime());
$signature = sha1($hash . $user_email); 
$cookie = base64_encode($signature . "-" . $hash . "-" . $user_email);
setcookie('authentication', $cookie); 

你怎么看?

【问题讨论】:

  • 如何检查是否有人登录?
  • 好吧,我只检查 cookie 是否已定义(isset)或为空
  • 哦,这很不安全,因为在浏览器中手动设置cookie非常简单!
  • 为什么不使用 $_SESSIONS?

标签: php security cookies


【解决方案1】:

您需要验证随机生成的哈希或服务器端的东西。用户可以根据需要调整数据,并将任何内容发送回 cookie 数据。使用您当前的方案,似乎很容易指定他们想要的任何用户。吓人。

当他们登录时,将身份验证密钥连同 IP、UserAgent 和 Expiration 一起粘贴到数据库中。如果他们尝试使用您的站点并且 IP 或 UserAgent 不同,或者密钥已过期,请强制注销。

【讨论】:

    【解决方案2】:

    轶事时间:早在 2002 年左右,我正在查看来自学校网络的数据包转储,并告诉他们他们需要修复他们的成绩、出勤率、学生信息以及阳光下的一切系统。他们设置它的方式是,在用户通过身份验证后,系统将设置一个仅包含用户名和会话结束期限的 cookie。我启动了一个浏览器,选择了一个用户名(名字首字母,姓氏),并将其设置为 cookie。我有访问权限。

    他们应该做的是设置一个随机的 128 数字并在服务器中跟踪该数字(数字、对应的用户、超时值)。

    另见

    【讨论】:

      【解决方案3】:

      为了轻松防止用户更改 cookie 的值,您可以使用网络上的this class。它将写入一个包含与所有 cookie 值的“总和”相对应的哈希的 cookie,因此如果您更改数据,哈希将不正确。

      只需要三种方法: Cookie::set(cookie_name, value), Cookie::get(cookie_name)Cookie::reset().

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多