首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成登录令牌的最佳方法是什么?这种身份验证方法易受攻击吗?

生成登录令牌的最佳方法是什么?这种身份验证方法易受攻击吗?
EN

Stack Overflow用户
提问于 2011-07-04 10:48:03
回答 3查看 8.4K关注 0票数 13

我必须在基于Li三国( PHP框架)的应用程序中实现登录令牌。原因有二:

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

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

  1. 用户请求页面
  2. 服务器在HTML中某个地方返回带有会话令牌的视图
  3. 客户端JS读取令牌并将其发送到node.js服务器,试图通过web套接字建立连接。
  4. 服务器接收connect请求,并通过PHP服务器验证发送给它的令牌。
  5. 允许或拒绝基于结果的连接。

这是两个部分的问题,这只是为了证明我不是个白痴,因为这个网站的安全性比平时要高。

这是创建登录令牌的合理方法吗?

代码语言:javascript
复制
<?php
// String::hash() generates a sha512 (by default) hash. 
String::hash(time() . $user['username']);
?>

我提出的网络套接字认证系统是否正常?你能看到出现的任何问题或任何更有效的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-04 15:57:20

您应该看看in:http://li3.me/docs/lithium/security/validation/RequestToken::check()#source中的http://li3.me/docs/lithium/security/validation/RequestToken::check()#source

它处理CSRF保护,并使用加密安全的随机令牌,基于类似于上面的原理,但使用bcrypt提供额外的保护层,它可以匹配任意数量的唯一散列。

票数 5
EN

Stack Overflow用户

发布于 2011-07-04 11:08:40

首先,您应该改变生成登录令牌的方式。与用户名连接的当前时间的散列很难猜测;这是确保用户名安全的必要条件。有很多方法可以做到这一点,最关键的是你使用了一个很好的随机性来源。你可以这样做:

代码语言:javascript
复制
list(,$token) = unpack('H*', openssl_random_pseudo_bytes(15, $safe));
$safe or die("unsafe source");

您使用的整个方法只有在您传递的承载令牌从未未经加密的情况下才是安全的。这意味着每次传输时都必须通过SSL/TLS进行传输。

仍然存在这样的问题:您可能会意外地将令牌发送到错误的位置,因此,如果任何目的地是动态生成的(例如,通过某种发现协议),您必须格外小心。避免此问题的唯一方法是使用加密技术。

票数 6
EN

Stack Overflow用户

发布于 2011-07-04 11:10:48

您可以使用uniqid()函数生成唯一ID,以提高安全性,然后可以随时间一起删除或使用。

代码语言:javascript
复制
<?php
String::hash(time() . uniqid() . $user['username']);
?>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6570430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档