如何加密 Cookie 值?

问题描述 投票:0回答:6

如何在 PHP 中加密并解密 cookie 值?加密的安全性如何?

php security cookies
6个回答
10
投票

有多种不同的方法可以对 cookie 和其他地方的信息进行加密。加密强度将根据您选择进行实际加密的方法而有所不同。

mycrypt
是一个很好的起点。 请参阅此答案,了解使用 mcrypt 的示例。

我不建议在 cookie 中放入任何敏感内容,即使它将被加密。对某人来说太诱人了。如果可以的话,尝试坚持参加课程。


0
投票

我完全同意其他答案:如果数据确实敏感,则应将其存储在服务器端的会话中,而不是 cookie 中。

就加密 cookie 内容的方法而言,Suhosin PHP 扩展提供了透明地加密所有 cookie 的功能。如果您有能力安装 PHP 扩展,这对您来说可能比编写自己的加密方案更容易,也可能不那么容易。


0
投票

如果 cookie 被安全加密(例如,使用服务器存储的秘密并定期更改),我认为在 cookie 中存储有用数据没有问题。为什么要存放在服务器上呢?让客户做一些改变的工作——尤其是在偏好方面。为什么服务器必须不断地从会话文件中存储和检索数据?如果您的网站有数十万用户,该怎么办?现在您必须维护数十万个会话文件。


0
投票

我能想到一个合理的用途。假设您有一个大型服务器场,那么您将在数据库和/或 memcached 服务器处遇到用于处理会话请求的瓶颈。“该用户是否已登录?”

如果您将用户会话数据作为加密值存储在 cookie 中,那么您可以避免进行大量的读/写操作,并允许无限大小的 cookie 存储,因为除了被CPU 限制用于 cookie 数据的加密/解密。

Ruby on Rails 默认情况下会执行此操作 - 尽管它仅对数据进行签名而不对其进行加密。有一种替代实现,它使用自己的密钥和签名对数据进行加密,因此用户无法看到您在其会话中存储的数据。


0
投票
//I use an encryption routine on our websites cookies as follows

//Setting the Cookie


$simple_string = "encoded_cookie_value";
$ciphering = "BF-CBC";
$encryption_iv = random_bytes($iv_length);
$encryption_key = openssl_digest(php_uname(), 'MD5', TRUE);
$encryption = openssl_encrypt($simple_string, $ciphering,
$encryption_key, $options, $encryption_iv);
$random = rand();
$cookie_name = "linkspider";
$value = $encryption;
$secureOnly = true;

// 86400 = 1 day
setcookie($cookie_name, $value, time() + (86400 * 2), "/", ".linkspider.company", $secureOnly);
if(isset($_COOKIE['linkspider'])){
header("location:https://www.linkspider.company/?activation=services");
exit();
}
else{
header("location:https://www.linkspider.company/");
exit();

}

//Reading the Cookie

error_reporting(E_ALL);

$simple_string = $_COOKIE['linkspider'];


$ciphering = "BF-CBC";
$iv_length = openssl_cipher_iv_length($ciphering);
$options = 0;
$encryption_iv = random_bytes($iv_length);
$encryption_key = openssl_digest(php_uname(), 'MD5', TRUE);
$decryption = openssl_decrypt($encryption, $ciphering,
$encryption_key, $options, $encryption_iv);



if($decryption = $simple_string){

//通过测试
}

else
{
header("location:https://www.linkspider.company/sales");
exit();
}

-6
投票

我不能简单地想到对 cookie 中的数据进行加密是有用的情况。如果您想保留有关用户或其偏好、信息等的秘密数据,请将其存储在服务器上的文件、会话或数据库中,但不要存储在客户端的计算机中。

另一方面,如果您创建身份验证,那么您应该使用会话而不是创建秘密加密的 cookie 值。会话的实现并不是无缘无故的,它们是必经之路。

© www.soinside.com 2019 - 2024. All rights reserved.