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;
    }

このファイルには session_id の 2 つの関数があるため、この問題を解決する方法がわかりません。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 ソルト ハッシュまたは base_64 として返したいと考えています。ありがとう

4

3 に答える 3

0

最初に crypt() メソッドが MD5 をサポートしているかどうかを確認し、暗号化する文字列と $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_decryptmcrypt_encryptbase64_encodebase64_decode..

回答例:パスワードの暗号化/復号化

于 2012-11-01T09:41:23.027 に答える
0

まず、セッション ID の目的を理解する必要があります。通常、サーバーは、ユーザーが Web サイトで既にいくつかのアクションを実行したことを認識しません。各要求は、新しい訪問のようなものです。ユーザーとそのアクションを記憶するために、サーバーはそれらを乱数であるセッション ID と一緒に保存します。

このセッション ID はブラウザに渡され、たとえばユーザーがボタンを押すと、このセッション ID が処理されてサーバーに戻されます。これで、サーバーはこの番号で保存されたアクションを探すことができるため、ユーザーを「記憶」します。

あなたの例では、セッション ID を取得し、一方向ハッシュ関数で破棄して、ブラウザーに渡しました。ブラウザーがこの無効なセッション ID を処理するとき、サーバーはこの無効な番号で保存されたアクションを見つける機会がありません。

つまり、セッション ID は、サーバー上に既に保存されている情報を再検索するための単なる数値です。この番号を変更しても、セキュリティはまったく向上しません。ブラウザは取得したものを送り返すだけであり、サーバーは、以前に暗号化/難読化したかどうかに関係なく、それを認識しなければならないからです。

セッション ID が 203、204 などのように予測可能な場合は、そのような不適切な数値を生成するコードを見つけて、このコードを修正し、「真の」乱数を生成する必要があります。

于 2012-11-01T20:29:41.637 に答える