我刚注意到我的主持人开始使用Suhosin Hardening,我对此并不熟悉,并且我的应用程序存在重大问题,主要是在会话中.
会话正在以以下格式存储:
_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; } } }
提前致谢!
我认为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加密密钥.