шифрование и дешифрование информации, хранящейся в куки - PullRequest
7 голосов
/ 25 февраля 2011

Мне нужно надежно шифровать и дешифровать информацию о пользователях (user_id и password) в файлах cookie.

Каков наилучший способ сделать это?Какие функции шифрования и дешифрования мне нужны?

Я использую PHP и MySQL, и пример будет участвовать?

Ответы [ 3 ]

11 голосов
/ 25 февраля 2011

например

Set encrypted cookie:
<?php

$time = time()+60*60*24*30*12; //store cookie for one year
setcookie('cookie_name', encryptCookie('cookie_value'),$time,'/');

?>

Get encrypted cookie value:

<?php

$cookie_value = decryptCookie($_COOKIE['cookie_name']);

?>

вот функция шифрования cookie:

    <?php

function encryptCookie($value){
   if(!$value){return false;}
   $key = 'The Line Secret Key';
   $text = $value;
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
   return trim(base64_encode($crypttext)); //encode for cookie
}

function decryptCookie($value){
   if(!$value){return false;}
   $key = 'The Line Secret Key';
   $crypttext = base64_decode($value); //decode cookie
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
   return trim($decrypttext);
}

?>

Подробнее о функции mcrypt вы можете прочитать здесь: функция php mcrypt

8 голосов
/ 25 февраля 2011

Не храните пароли в куки. Никогда не делай таких вещей. Если вы хотите, чтобы пользователь как-то не вводил свои логин и пароль для входа в систему, вы можете сгенерировать некоторый случайный токен при входе в систему (например, sha1(mt_rand())) и сохранить это значение в файле cookie и базе данных.

Затем, когда вы пытаетесь идентифицировать пользователя, вам просто нужно проверить, можно ли найти значение, найденное в его cookie, в вашей базе данных. Создавайте новое значение каждый раз, когда он входит в систему (используя имя + пароль или этот cookie).

1 голос
/ 25 февраля 2011

Не существует хорошего способа «надежного шифрования и дешифрования информации о пользователях в файлах cookie», поскольку хранение этой информации в файлах cookie по своей сути небезопасно.

Рекомендуется использовать метод генерации случайного идентификатора сеанса и его использования в качестве только часть информации, хранящейся в файлах cookie.Этот идентификатор сеанса затем используется на стороне сервера для поиска информации о действительной учетной записи пользователя (и любого состояния относительно того, что он делает) в базе данных или файле, так что вы отправляете только небольшое количество бессмысленных в противном случае данных идалее по сети с каждым запросом, сделанным пользователем.Если такой cookie-файл будет перехвачен «Плохими парнями», он только скомпрометирует сеанс пользователя (позволяя злоумышленнику временно выдать себя за пользователя до окончания сеанса);пароль пользователя останется в безопасности, потому что его нет в файле cookie и (предположительно) никогда не отображается ни на одной странице вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...