php - 生成登录 token 的最佳方法是什么?这种身份验证方法是否容易受到攻击?

标签 php node.js websocket token lithium

我必须在基于 Lithium(PHP 框架)的应用程序中实现登录 token 。两个原因:

我想要一个“记住我”的功能。

我还需要一种在服务器上跟踪登录的方法,以便我可以像这样在 node.js 套接字服务器上验证经过身份验证的用户:

  1. 用户请求页面
  2. 服务器在 HTML 中的某处返回一个带有 session token 的 View
  3. 客户端 JS 读取 token 并将其发送到 node.js 服务器,以尝试通过 Web 套接字建立连接。
  4. 服务器接收连接请求,并与 PHP 服务器验证发送给它的 token 。
  5. 根据结果允许或拒绝连接。

所以这是一个由两部分组成的问题,只是为了验证我不是白痴,因为这个网站的安全性比平时更重要。

这是创建登录 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/

相关文章:

php - 向MySQL数据库插入大量数据时收到 "An existing connection was forcibly closed by the remote host"错误

php - Shopify 订单创建 Webhook 使用 PHP 插入 Mysql

java - @ServerEndpoint 和@Autowired

python - 通过 python websocket 重播基于计时器的数据

windows - Windows 8 应用商店应用程序可以通过 UDP/TCP 套接字与 Windows 7 桌面应用程序通信吗?

php - 如何使用单个发布的参数来运行 BETWEEN 或 IN(从表中选择参数)类型查询?

php oo - 如何做对?

node.js - npm 从本地位置而不是从网络安装软件包?

node.js - 收到 Redis ZRANGE 的回复

javascript - 如何以异步方式调用 10 个函数并收集所有结果并知道所有结果何时完成?