加密日期/时间并创建令牌

时间:2013-12-02 21:53:59

标签: php cookies encryption md5 sha1

所以我一直在为我的网站记住我的功能。

它目前有效,但我一直在使用基本数据而不是加密,因为我想知道在学习过程中发生了什么。

我正在使用cookie,然后使用存储相同数据的数据库,然后进行检查。每次登录时都会生成一个新的cookie / db条目。

所以目前这将是cookie :( id的行是userid,这个cookie是在登录过程中设置的)

 date_default_timezone_set('Europe/London');
 $token = '1';
 $cookiedate = date('d-m-y h:i:s a', time());
 $cookie_val = $row['id'] . ':' . $token . ':' . $cookiedate;

 setcookie (
"cookie", 
$cookie_val, 
time() + (10 * 365 * 24 * 60 * 60),
'/'
 );

从某些方面来看,我的下一步是什么?我也不太确定令牌,它应该是一个随机散列的字符,只是用作额外的安全方法吗?

该网站不会变得庞大,并且从登录到某人帐户,您将无法真正造成任何损害,因为敏感页面受密码保护。

2 个答案:

答案 0 :(得分:1)

对你所拥有的东西的改进是:

  1. 生成一个随机标记,例如20个字符,例如:

    bin2hex(openssl_random_pseudo_bytes(10));
    
  2. 将该令牌与用户标识符(以及其他相关数据)一起存储在您的数据库中。

  3. 将标记值写入cookie。

  4. 这可以防止出现一些问题:

    1. 令牌数据仅在服务器端已知,客户端仅获取密钥。

    2. 用户可以撤销“记住我”令牌,以防止未来未经授权的访问。

    3. 篡改cookie值会导致未知的令牌值,因此访问将被拒绝。

    4. 成功登录后,您将生成新令牌。

      通常,为避免数据篡改,您可以使用hash_hmac()使用密钥对特定值进行哈希处理。

答案 1 :(得分:0)

为什么不使用md5()简单地散列你的cookie。