我必须在基于 Lithium(PHP 框架)的应用程序中实现登录 token 。两个原因:
我想要一个“记住我”的功能。
我还需要一种在服务器上跟踪登录的方法,以便我可以像这样在 node.js 套接字服务器上验证经过身份验证的用户:
- 用户请求页面
- 服务器在 HTML 中的某处返回一个带有 session token 的 View
- 客户端 JS 读取 token 并将其发送到 node.js 服务器,以尝试通过 Web 套接字建立连接。
- 服务器接收连接请求,并与 PHP 服务器验证发送给它的 token 。
- 根据结果允许或拒绝连接。
所以这是一个由两部分组成的问题,只是为了验证我不是白痴,因为这个网站的安全性比平时更重要。
这是创建登录 token 的合理方式吗?
<?php
// String::hash() generates a sha512 (by default) hash.
String::hash(time() . $user['username']);
?>
我提出的网络套接字身份验证系统是否合理?您能看到出现的任何问题或任何更有效的方法吗?
最佳答案
首先,您应该更改生成登录 token 的方式。当前时间与用户名连接的哈希值远非难以猜测;这是它安全的必要条件。有很多方法可以做到这一点,关键是您使用良好的随机性来源。你可以这样做:
list(,$token) = unpack('H*', openssl_random_pseudo_bytes(15, $safe));
$safe or die("unsafe source");
只有在您传递的不记名 token 从未以未加密的方式发送时,您使用的整体方法才是安全的。这意味着每次传输时都必须通过 SSL/TLS 传输。
仍然存在您可能不小心将 token 发送到错误位置的问题,因此如果任何目的地以某种方式动态生成(例如通过某些发现协议(protocol)),您必须格外小心。避免这个问题的唯一方法是使用密码学。
关于php - 生成登录 token 的最佳方法是什么?这种身份验证方法是否容易受到攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570430/