对其他用户的SESSID进行公共md5哈希是否安全?

时间:2013-08-11 19:35:34

标签: php security md5 sessionid

我在php WebSocket服务器上运行了一个聊天应用程序。

当客户端连接时,我向他发送一个包含其他用户ID和昵称的对象。我需要发送这些ID,以便当用户说出某些内容或断开连接等时,其他用户可以知道谁已经说过,或已经断开连接等。

服务器端我使用SESSID因为我使用$_SESSION数据,但当然我无法公开SESSID列表。

然后,我可以使用md5($userId)(其中$userId是SESSID),还是可以从md5哈希中劫持会话?

2 个答案:

答案 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>

希望它有所帮助。