Шифрование php сессии
Я хотел бы, чтобы данные сессий зашифровывались так, как будто они находятся в suhosin, есть ли какая-нибудь библиотека, обеспечивающая это?
2 ответа
Решение
Вы можете легко использовать mcrypt или пользовательское шифрование AES для шифрования данных сеанса. Лучше всего было бы создать класс-оболочку сеанса, который шифрует переменные при их установке.
Для управления ключами вы можете создать уникальный ключ и сохранить его в файле cookie, чтобы только пользователь мог расшифровать свои собственные данные сеанса.
Здесь приведен пример реализации для Zend Framework: http://www.eschrade.com/page/encrypted-session-handler-4ce2fce4/
важные функции для справки:
// $this->secredKey is stored in a cookie
// $this->_iv is created at the start
public function setEncrypted($key, $value)
{
$_SESSION[$key] = bin2hex(
mcrypt_encrypt(
MCRYPT_3DES,
$this->secretKey,
$value,
MCRYPT_MODE_CBC,
$this->_iv
)
);
}
public function getEncrypted($key)
{
if (isset($_SESSION[$key])) {
$decrypt = mcrypt_decrypt(
MCRYPT_3DES,
$this->secretKey,
pack(
'H*',
$_SESSION[$key]
),
MCRYPT_MODE_CBC,
$this->_iv
);
return rtrim($decrypt, "\0"); // remove null characters off of the end
}
return null;
}