2011-05-07 23 views
8

我剛剛注意到我的主機開始使用Suhosin淬火,我對此並不十分熟悉,並且在我的應用程序中出現重大問題,主要是在會話中。解密和閱讀Suhosin會話數據

的會話nowing被存儲在以下格式:

_EzyqHpPJqmQbSpRmXAJTxuFq980aNQlc3XAiRkWxlZQ9B0fnV... 

我不介意,但它也打破我的申請,我需要一種方法來加密,因爲它不是讓我登錄到解碼因爲這個我的應用程序。

我有一個函數來反序列化會話數據,不知道在哪裏我撿起但在這裏它是:

public function unserialize_session_data($data) 
{ 
    $variables = array(); 

    $a = preg_split("/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

    for($i = 0; $i < count($a); $i = $i+2) 
    { 
     $variables[$a[$i]] = unserialize($a[$i+1]); 
    } 

    return($variables); 
} 

它給抵消該函數的錯誤,因爲會話數據是不是在格式化這是爲什麼我想知道爲什麼有人知道一種方法來解密/解碼上述醜陋的suhosin數據以呈現它的原始格式?

- 編輯 -

發佈其使用上述反序列化功能

/*********************************************************************** 
# Get Session Data of a certain session id 
# -------------------------------------- 
# This function will retrieve all session information related to a certain session id from 
# the database, after that it unserializes the data and returns an array of data. 
# 
# @return array (Containing Session Data) 
***********************************************************************/ 
    public function get_session_data($session_id) 
    { 
     if (isset($session_id) && $session_id != "") 
     { 
      $sql = mysql_query("SELECT ses_value FROM sessions WHERE (ses_id = '$session_id');") or die ("MySQL Error : <b>" . mysql_error() . "</b><br />"); 

      if (mysql_num_rows($sql) > 0) 
      { 
       $res = mysql_fetch_assoc($sql); 
       $res = $this->unserialize_session_data($res['ses_value']); 
         return $res; 
      } 
     } 
    } 

提前感謝的功能!

+1

爲什麼您首先手動訪問會話存儲? 'session_start()'有什麼問題,直接使用'$ _SESSION'? – mario 2011-05-07 01:34:55

+0

session_start()用於啓動會話,$ _SESSION是一個超級全局數組,它只存儲全局空間中可用的會話信息,我主要檢索結果以驗證和顯示會話信息。我將發佈另一個使用上述函數的函數。 – Zubair1 2011-05-07 01:42:08

+0

你可以使用ini_set()來關閉它正在使用的加密嗎? http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.encrypt – preinheimer 2011-05-30 17:53:38

回答

0

你可以使用ini_set()來關閉它正在使用的加密嗎?

你需要指定要用於加密會話數據(該頁面顯示有可能通過ini_set()做),以便對其進行解密確切的關鍵。這樣做,解密它應該成爲可能的關鍵(我不知道它使用什麼加密系統)。

+0

這是我嘗試的第一件事,但不幸的是它並沒有爲我工作。 – Zubair1 2011-05-30 20:19:43

3

我以爲Suhosin的解密和加密是透明的?

Parameter  Description 
Encrypt   Turns on the transparent encryption 

總之,產生加密密鑰的方法是:

cryptkey + user agent + document root + IP octets 

所以:

12345Mozilla/5.0 (X11; Linux x86_64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2/var/www127.0.0.1 

的變量不使用隔離串聯。 如果由於某種原因cryptkey字符串爲NULL,則Suhosin將默認值爲「D3F4UL7」。
構建完成後,使用SHA256對字符串進行哈希處理,結果用於生成256位rijndael加密密鑰。