【发布时间】:2015-11-22 23:57:55
【问题描述】:
这是我想出的存储 cookie 以验证我网站上的用户的方法。
我生成的令牌应该多长时间? 33足够还是应该是64?我这一代足够安全吗?
<?PHP
$token = bin2hex(openssl_random_pseudo_bytes(33));
echo $token.'<br>';
$hash = hash('sha256', $token);
echo $hash;
//Test user db and local cookie
$stored_hash = '5be39777ad41916c5fa1e78681bfc8793a5cfe7c27842846ad23396e44b390a7';
$cookie = '1a9243f95354252d937d2b99e64a7eeb462e00c72b26d488426f08ef11667522c6';
$cookie_hash = hash('sha256', $cookie);
if(hash_equals($stored_hash, $cookie_hash))
echo 'true';
else
echo 'false';
?>
【问题讨论】:
-
你有多偏执?你要存储多少令牌?
-
大约 10k 用户。至于偏执狂只是想安全。 33 和 64 长度有很大的安全差异吗?
-
只需使用会话cookie并修改php.ini,特别是哈希函数和每个字符的哈希位,php.net/manual/en/…
-
想象一个被认为是“唯一”的 GUID,然后使用“sha256”对其进行哈希处理。 base64_encode - 存储在 cookie 中。我怀疑很难预测,并且很可能对于您的目的“足够独特”? '在顶部' - 也许。
标签: php cookies random hash sha256