所以我一直在为我的网站记住我的功能。
它目前有效,但我一直在使用基本数据而不是加密,因为我想知道在学习过程中发生了什么。
我正在使用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),
'/'
);
从某些方面来看,我的下一步是什么?我也不太确定令牌,它应该是一个随机散列的字符,只是用作额外的安全方法吗?
该网站不会变得庞大,并且从登录到某人帐户,您将无法真正造成任何损害,因为敏感页面受密码保护。
答案 0 :(得分:1)
对你所拥有的东西的改进是:
生成一个随机标记,例如20个字符,例如:
bin2hex(openssl_random_pseudo_bytes(10));
将该令牌与用户标识符(以及其他相关数据)一起存储在您的数据库中。
将标记值写入cookie。
这可以防止出现一些问题:
令牌数据仅在服务器端已知,客户端仅获取密钥。
用户可以撤销“记住我”令牌,以防止未来未经授权的访问。
篡改cookie值会导致未知的令牌值,因此访问将被拒绝。
成功登录后,您将生成新令牌。
通常,为避免数据篡改,您可以使用hash_hmac()
使用密钥对特定值进行哈希处理。
答案 1 :(得分:0)
为什么不使用md5()简单地散列你的cookie。