我在php WebSocket服务器上运行了一个聊天应用程序。
当客户端连接时,我向他发送一个包含其他用户ID和昵称的对象。我需要发送这些ID,以便当用户说出某些内容或断开连接等时,其他用户可以知道谁已经说过,或已经断开连接等。
服务器端我使用SESSID因为我使用$_SESSION
数据,但当然我无法公开SESSID列表。
然后,我可以使用md5($userId)
(其中$userId
是SESSID),还是可以从md5哈希中劫持会话?
答案 0 :(得分:2)
此上下文中使用的任何哈希函数都是不安全的,选择MD5作为哈希函数意味着您不会意识到与加密函数相关的最佳实践。 MD5已被打破多年,永远不应该用于任何事情。 (即使sha1更安全,更快,但你可能也不应该使用SHA1。)
这有很多问题。最值得注意的是,这应该是trivial to crack,因为任何小数字应该在彩虹表中。攻击者应该知道每个SESSID
值。
作为会话ID,请使用PHP session_start()
。如果您需要令牌,请使用加密随机数。如果您不了解哈希函数的基础知识,那么不要使用哈希函数。
答案 1 :(得分:1)
哈希不是安全性最好的东西,在大多数情况下我都不推荐它。
但在这种情况下存在差异:
所有SSID都是绝对无意义的(我的意思是它们是随机的)所以如果你添加了所需的 salt 来制作你的
salt.length + $userId.length
超过32个字符(为安全起见,使其超过128个字符), 逻辑上不可能 来解密散列。解密就像从哈希重建文件一样! 这是不可能的
为了简化操作,以下是您需要的代码:
function YourNewHashMaker($str)
{
return sha1(md5("Some Random Salt".$str).$str."Another Random Salt!".sha1("This one is too much".$str));
}
像这样使用:
YourNewHashMaker($userId);
这里只有安全漏洞,有人可能窃取您的代码,并开始制作彩虹表,这是真的很难做的事情。还有所有其他哈希的安全漏洞。
编辑:请记住,无论您是否需要创建自己的 hashmakers ,请记住 输出字符串必须由经过批准的算法生成。 换句话说, 不要在'sha1(....)'之前或之后添加任何内容,只是在函数内部。 < / p>
希望它有所帮助。