0

我正在使用带有用户平面网络聊天的 phpfox,这个函数是从数据库中获取 sessionGuid 原始函数是: 函数 1:

function get_current_online_session_login() {
        $oSrvSec = &App::getModuleService('Account', 'Security');
        $login = $oSrvSec->getCurrentUserLogin();
        $aReq = getRow(App::getT('online_session'), 'online_session_user = "' . $login . '"');
//      return $aReq['online_session_login'];
        return $aReq['online_session_id'];
    }

我在其中进行了更改,因此它返回了加盐哈希,但聊天不起作用并显示错误,即您无权进入聊天。这是我在此代码中所做的更改:

function get_current_online_session_login() {
        $oSrvSec = &App::getModuleService('Account', 'Security');
        $login = $oSrvSec->getCurrentUserLogin();
        $aReq = getRow(App::getT('online_session'), 'online_session_user = "' . $login . '"');
        $salt='waka_waka_shaka_laka_8342394';
//      return $aReq['online_session_login'];
        $umSar = $aReq['online_session_id'];
        $saltedHash = md5($umSar . $salt);
        return $saltedHash;
    }

在这个文件中有 2 个用于 session_id 的函数,所以我不知道如何解决这个问题这里是第 2 个 session_id 函数: 函数 2

function get_user_with_session_id($session_id) {
        $session = getRow(App::getT('online_session'), "online_session_id = '$session_id'");
//      $session = getRow(App::getT('online_session'), "online_session_login = '$session_id'");
        $oSecurityService = &App::getModuleService('Account', 'Security');
        $user = $oSecurityService->getUserByName($session['online_session_user']);      
        return isset($user) ? $user->aData['id'] : null;
    }

请我需要帮助。您可以看到函数 1:和函数 2:是我的 common.php 文件中的原始函数,该函数返回 session_id 的正常数字,我想将 session_id 作为 md5 salted hash 或 base_64 返回。谢谢

4

3 回答 3

0

您首先必须检查 crypt() 方法是否支持 MD5,然后将要加密的字符串和 salt 一起传递,从 $1$ 开始。请参阅PHP.net 上的 crypt()

if (CRYPT_MD5 == 1) {
  $saltedHash' . crypt($umSar, '$1$waka_wak$') . "\n";
}

请注意,对于 MD5,盐的长度必须为 12 个字符。

于 2012-11-01T07:34:30.180 回答
0

如果您正在考虑online-session-id解密您加密的内容,function get_current_online_session_login()那不是 md5 散列的目的。

如果您想加密/解密,您可以使用mcrypt_decrypt,mcrypt_encryptbase64_encode, base64_decode..

示例答案:加密/解密密码

于 2012-11-01T09:41:23.027 回答
0

首先,您应该了解 session-id 的用途。通常服务器不会识别,用户已经在网站上做了一些动作,每个请求都像是一次新的访问。为了记住用户及其操作,服务器将它们与一个随机数(即会话 ID)一起存储。

这个 session-id 将被传递给浏览器,如果用户按下一个按钮,这个 session-id 将被处理回服务器。现在服务器可以用这个数字查找存储的操作,因此会“记住”用户。

在您的示例中,您获取了会话 ID,使用单向哈希函数将其销毁,然后将其传递给浏览器。当浏览器处理回这个无效的 session-id 时,服务器没有机会找到这个无效编号的存储动作。

也就是说,会话 ID 只是一个数字,用于重新查找服务器上已存储的信息。当您更改此数字时,它绝不会提高安全性,因为浏览器只会发回他获得的内容,并且服务器必须识别它,无论他之前是否对其进行了加密/混淆。

如果您的会话 ID 是可预测的,例如 203、204、...,那么您应该找到生成此类不适当数字的代码段并修改此代码,使其生成“真正的”随机数。

于 2012-11-01T20:29:41.637 回答