【问题标题】:encrypting and decrypting information stored in cookies加密和解密存储在 cookie 中的信息
【发布时间】:2011-07-04 03:54:02
【问题描述】:

我需要在 cookie 中安全地加密和解密有关用户(user_idpassword)的信息。

最好的方法是什么?需要什么加解密功能?

我正在使用PHPMySQL 并且会参与示例?

【问题讨论】:

  • 不建议在cookie中存储密码
  • 为什么需要将用户密码存储在 cookie 中?
  • 因为 POST 数据可以被嗅探,所以我认为使用带有加密的 cookie 来发送登录凭据会更好,你建议吗?
  • 让用户输入密码有什么问题。如果您想要一个“记住我”系统,您可以在 cookie 中对某种标记进行排序。在 cookie 中存储密码是一个巨大的安全问题。
  • 然后使用 ssl 保护您发布的数据。

标签: php mysql cookies


【解决方案1】:

例如

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 function

【讨论】:

  • 你能定义函数encryptCookie()吗?
  • @Michiel:如果他要使用 MD5,我会对 decryptCookie() 更感兴趣。
  • 抱歉,速度有点快。我现在添加了加密/解密示例
  • @Michael:这很有趣(也很有趣)! @Mikelangelo:你在哪里使用 MD5?
  • @Michael:如果原始消息包含特殊字符,我无法解码以获取原始消息:$value="adsj+adf%B3=="。不确定这是否与这个主题有关,但我不能把 cookie 设置好,但 $_COOKIE['mycookie'] 没有这些特殊字符。谢谢。
【解决方案2】:

不要将密码存储在 cookie 中。永远不要做这种事情。 如果您希望通过某种方式让您的用户不必输入其登录名和密码即可登录,您可以在他登录时生成一些随机令牌(例如sha1(mt_rand()))并将此值存储在 cookie 和数据库中。

然后在尝试识别用户时,您只需检查在他的 cookie 中找到的值是否可以在您的数据库中找到。每次登录时生成一个新值(使用名称 + 密码或使用此 cookie)。

【讨论】:

    【解决方案3】:

    没有“安全地加密和解密 cookie 中有关用户的信息”的好方法,因为将这些信息存储在 cookie 中本质上是不安全的。

    推荐的技术是生成一个随机会话标识符,并将其用作存储在 cookie 中的唯一条信息。然后在服务器端使用此会话 ID 在数据库或文件中查找用户的实际帐户信息(以及有关他们正在做什么的任何状态),以便您只发送少量其他无意义的数据,并且用户提出的每个请求都在网络中传播。如果这样的 cookie 被 The Bad Guys 截获,它只会危及用户的会话(允许攻击者临时冒充用户,直到会话结束);用户的密码将保持安全,因为它不在 cookie 中,并且(可能)从未显示在您的应用程序的任何页面上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      相关资源
      最近更新 更多