我想通过令牌验证用户。一个令牌是计算客户端(JavaScript),另一个是计算服务器端(PHP)。如果他们相等,则用户可以访问。
我在这个计算中使用了一些随机变量,当前时间和用户ID。有哪些好方法可以验证用户?我不想通过密码来做。
答案 0 :(得分:1)
为什么不使用秘密的HMAC,而不是使用“随机”变量并希望它们发生碰撞?我会给出一个类似的例子:
为防止对我构建的网站中的表单进行CSRF攻击,我随机生成一个20字节的字符串并将其存储在$ _SESSION ['formTokens']中。当表单显示给用户时,我将<input type="hidden" name="csrf" value="<?=hash_hmac('sha1', $_SERVER['REMOTE_ADDR'], $_SESSION['formTokens']['thisFormID']);" />
添加到表单。
提交表单时,我检查(使用常量时间哈希比较函数)$_POST['csrf']
和hash_hmac('sha1', $_SERVER['REMOTE_ADDR'], $_SESSION['formTokens']['thisFormID'])
具有相同的值。
你可以在这里做类似的事情。