当前位置:  开发笔记 > 编程语言 > 正文

有关签名cookie而非会话的提示

如何解决《有关签名cookie而非会话的提示》经验,为你挑选了2个好方法。

我正在考虑放弃PHP $_SESSION(即服务器端会话处理,添加一些与语言无关的风格)并使用签名的cookie代替,因为我听到了很多关于它们的好处(Flickr使用它们,所以它们应该是好的对我来说也足够了).

我理解该技术的基本上下文:使用cookie自由地将键值对从客户端传递到服务器,并对它们进行签名以确保值不被篡改.

但是实施签名部分的好方法是什么?也; 由于流量可能是HTTP,使用此方法发送敏感数据(例如用户密码)是否有好办法,同时防止cookie窃取和/或篡改?



1> Paul Dixon..:

何必?

我不会将此技术用于敏感数据.它可以与常规会话结合使用 - 您可以为客户端提供具有正常会话ID的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还有其他技术,包括为这些cookie提供一个令牌值,您只允许使用一次.这是一篇关于该技术的好文章.

您还可以查看在签名cookie中包含客户端IP,如果它与提供cookie的IP不匹配,则会让他们再次登录.这提供了更多保护,但对于明显IP地址不断变化的人不起作用.您可以将其设为可选功能,并为用户提供退出选项的方法.只是一个无所事事的想法,我没有看到在实践中完成:)

有关解释会话被盗,劫持和录制的好文章,请参阅会话和Cookie,它们提供了一些其他技巧,例如使用User-Agent标头作为附加签名.


永远不要使用ECB!http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29

2> Steve Clay..:

我完全为此目的制作了CookieStorage.所有存储的值都通过RIPEMD160散列(并随时间盐化)使用您的私钥进行安全签名,并可选择使用RIJNDAEL256进行加密.

每个值都与时间戳一起存储,时间戳是可检索的.

签名的例子.
加密示例.

如果您愿意,可以使用您选择的哈希/加密/解密函数.


该死的,我不能喜欢(书签)答案:)
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有