Зачем беспокоиться?
Я бы не стал использовать эту технику для конфиденциальных данных. Это может быть полезно в сочетании с обычным сеансом - вы можете дать клиенту cookie с обычным идентификатором сеанса, но также включить все те пары ключ / значение, которые нужны вашему приложению на каждой странице. Таким образом, вы можете избежать использования хранилища сеансов для каждого запроса страницы.
Вы должны стремиться к тому, чтобы объем данных был довольно узким, поскольку он будет отправляться при каждом запросе.
Имея это в виду, вперед ...
Подписание данных с помощью хеша
Если данные не являются конфиденциальными, вы можете подписать значения с помощью sha1 хеша, созданного из комбинации пар ключ / значение и общего секрета. например,
$values=array(
'user_id'=>1,
'foo'=>'bar'
);
$secret='MySecretSalt';
$plain="";
foreach($values as $key=>$value)
{
$plain.=$key.'|'.$value.'|';
}
$plain.=$secret;
$hash=sha1($plain);
Теперь дайте клиенту cookie со всеми значениями и хэшем. Вы можете проверить хэш, когда файл cookie представлен. Если хеш, который вы вычисляете по значениям, представленным клиентом, не соответствует ожидаемому хешу, вы знаете, что значения были подделаны.
Шифрование конфиденциальных данных
Для конфиденциальных данных вам необходимо зашифровать значения. Проверьте расширение mcrypt , которое предлагает множество криптографических функций.
Кража печенья
Что касается кражи файлов cookie, если вы помещаете учетные данные пользователя в файл cookie и доверяете ему, то тот, кто получает этот файл cookie, может выдавать себя за этого пользователя до тех пор, пока пароль не будет изменен. Рекомендуется помнить, как вы аутентифицировали пользователя, и предоставлять определенные привилегии только в том случае, если пользователь явно вошел в систему. Например, для форума вы можете разрешить кому-то публиковать сообщения, но не можете изменять его учетные данные, такие как адрес электронной почты.
Существуют и другие методы для «аутологичных» cookie-файлов, которые предусматривают присвоение таким cookie-токенам значения, которое вы разрешаете использовать только один раз. Вот хорошая статья об этой технике.
Вы также можете посмотреть, как включить IP-адрес клиента в подписанный файл cookie, и, если он не совпадает с IP-адресом, представляющим файл cookie, вы сможете снова войти в систему. Это обеспечивает большую защиту, но не будет работать для людей, чей очевидный IP-адрес постоянно меняется. Вы можете сделать это дополнительной функцией и дать пользователю возможность отказаться. Просто пустая мысль, я не видел, чтобы это было сделано на практике:)
Хорошую статью, в которой объясняется кража, угон и фиксация сеанса, см. Сеансы и файлы cookie , в котором предлагается еще несколько способов, таких как использование заголовка User-Agent в качестве дополнительной подписи.