我必须在基于Li三国( PHP框架)的应用程序中实现登录令牌。原因有二:
我想要一个“记住我”的功能。
我还需要一种跟踪服务器登录的方法,以便在node.js套接字服务器上验证经过身份验证的用户,如下所示:
这是两个部分的问题,这只是为了证明我不是个白痴,因为这个网站的安全性比平时要高。
这是创建登录令牌的合理方法吗?
<?php
// String::hash() generates a sha512 (by default) hash.
String::hash(time() . $user['username']);
?>我提出的网络套接字认证系统是否正常?你能看到出现的任何问题或任何更有效的方法吗?
发布于 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提供额外的保护层,它可以匹配任意数量的唯一散列。
发布于 2011-07-04 11:08:40
首先,您应该改变生成登录令牌的方式。与用户名连接的当前时间的散列很难猜测;这是确保用户名安全的必要条件。有很多方法可以做到这一点,最关键的是你使用了一个很好的随机性来源。你可以这样做:
list(,$token) = unpack('H*', openssl_random_pseudo_bytes(15, $safe));
$safe or die("unsafe source");您使用的整个方法只有在您传递的承载令牌从未未经加密的情况下才是安全的。这意味着每次传输时都必须通过SSL/TLS进行传输。
仍然存在这样的问题:您可能会意外地将令牌发送到错误的位置,因此,如果任何目的地是动态生成的(例如,通过某种发现协议),您必须格外小心。避免此问题的唯一方法是使用加密技术。
发布于 2011-07-04 11:10:48
您可以使用uniqid()函数生成唯一ID,以提高安全性,然后可以随时间一起删除或使用。
<?php
String::hash(time() . uniqid() . $user['username']);
?>https://stackoverflow.com/questions/6570430
复制相似问题