2011-05-07 12 views
8

Acabo de notar que mi host comenzó a usar Suhosin Hardening, no estoy muy familiarizado con esto y estoy teniendo problemas importantes con mi aplicación, principalmente en las sesiones.Descifrar y leer datos de la sesión de Suhosin

La sesión aber se almacena en el siguiente formato:

_EzyqHpPJqmQbSpRmXAJTxuFq980aNQlc3XAiRkWxlZQ9B0fnV... 

no me importa eso, pero su también romper mi solicitud, necesito una manera de descifrar el cifrado porque no es dejar a mi Registro mi aplicación debido a esto.

tengo una función para serializar los datos de la sesión, no sabe dónde cogí pero aquí está:

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

está dando errores de desplazamiento con esa función, ya que los datos de sesión no está en el formato que está esperando y es por eso que me preguntaba si alguien sabe de un método para descifrar/decodificar los feos datos suhosin anteriores para presentarlo en su formato original?

- EDITAR -

Publicación de la función que utiliza la función unserialize por encima de

/*********************************************************************** 
# 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; 
      } 
     } 
    } 

Gracias de antemano!

+1

¿Por qué accedió manualmente a la tienda de sesiones en primer lugar? ¿Qué pasa con 'session_start()' y usando '$ _SESSION' directamente? – mario

+0

session_start() es para iniciar una sesión y $ _SESSION es una matriz superglobal que solo almacena la información de la sesión que está disponible en el espacio global, estoy recuperando los resultados bajo demanda principalmente para autenticar y mostrar información de la sesión. Publicaré otra función que usa la función anterior. – Zubair1

+0

¿Puedes usar ini_set() para desactivar el cifrado que está usando? http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.encrypt – preinheimer

Respuesta

0

¿Puede simplemente usar ini_set() para desactivar el cifrado que está utilizando?

Tendrá que especificar la clave exacta que desea utilizar para el cifrado de los datos de sesión (que indica la página es posible hacerlo a través ini_set()) con el fin de descifrarlo. Una vez hecho esto, descifrarlo debería ser posible con la clave (no estoy seguro de qué sistema de cifrado está usando).

+0

Esa fue una de las primeras cosas que intenté, pero desafortunadamente no funcionó para mí. – Zubair1

3

Pensé que el descifrado y el cifrado de Suhosin eran transparentes.

Parameter  Description 
Encrypt   Turns on the transparent encryption 

De todos modos, la forma en que se genera la clave de cifrado es:

cryptkey + user agent + document root + IP octets 

Así:

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

Las variables se concatenan sin un separador. Si por algún motivo la cadena cryptkey es NULL, Suhosin adoptará el valor predeterminado "D3F4UL7".
Una vez construida la cadena se procesa usando SHA256 y el resultado se utiliza para generar una clave de cifrado rijndael de 256 bits.

Cuestiones relacionadas