保护cookies的其他方法

保护cookies的其他方法,cookies,language-agnostic,Cookies,Language Agnostic,我最近一直在思考这个问题,我想知道是否有人想到/实现了任何直观的方法来保护cookie免受操纵。我一直使用“用散列签名并稍后检查散列”的方法,但我并不认为这是一种特别出色的方法,就像所有优秀的程序员一样,我希望找到一种更好的方法 至于为什么要使用cookie,我不使用本机会话——我讨厌触摸文件系统。cookie是一种非常快速的存储数据的方法,即使使用了用户身份验证之类的东西,我也会在cookie中插入用户ID,可能还有用户名/电子邮件和签名,还有一个随机哈希 您使用了哪些聪明的方法来保护cook

我最近一直在思考这个问题,我想知道是否有人想到/实现了任何直观的方法来保护cookie免受操纵。我一直使用“用散列签名并稍后检查散列”的方法,但我并不认为这是一种特别出色的方法,就像所有优秀的程序员一样,我希望找到一种更好的方法

至于为什么要使用cookie,我不使用本机会话——我讨厌触摸文件系统。cookie是一种非常快速的存储数据的方法,即使使用了用户身份验证之类的东西,我也会在cookie中插入用户ID,可能还有用户名/电子邮件和签名,还有一个随机哈希


您使用了哪些聪明的方法来保护cookie数据?

使用散列时,您需要非常小心,确保包含了salt,否则确定匹配的散列可能很简单

因此,为了防止事故发生,通常也应该对cookie进行加密

--编辑


您可能还想了解有关“HTTPOnly”cookies的信息:

呃,您将用户ID存储在cookie中,并根据该值授予用户访问权限?你在自找麻烦。基于服务器会话的数据实现的存在有一个很好的安全性原因:将会话标识符存储在cookie中,并从服务器上的记录中访问用户ID,而客户端不能对其进行篡改

防止客户端篡改的Cookie安全性几乎是一个失败的原因。如果有足够的时间,有人会想出如何破解它。不要给客户这样的机会。Cookie security的唯一目的是确保客户端的Cookie不会被盗。

在Cookie上签名是一种非常合理的方法。HMAC本质上是将只有您的服务器知道的密钥滚动到散列中,因此,即使知道该算法的人也无法生成在不知道密钥的情况下被识别为有效的HMAC。仅仅使用普通的旧散列是很容易绕过的,因为攻击者可以生成自己数据的有效散列,而海洋中的所有“盐”都无法解决这一问题

即使您使用了会话ID而不是存储有意义的值,也必须小心,以免攻击者无法预测另一个有效的会话ID,并将其发送给您,从而劫持其他用户的会话。我相信有一个针对Hotmail的实际漏洞就是这样工作的

加密cookie只有在其中有您不希望用户看到的内容时才有帮助。更糟糕的是,没有HMAC的加密会给人一种错误的安全感,因为仅仅加密的cookie仍然容易受到密文的操纵,从而改变部分明文


总之,不要只是散列它,使用HMAC

在Security Now播客(我忘了是哪一集)上,Steve Gibson谈到要做这样的事情,我认为他推荐的系统是将cookie的内容做一个好的散列,然后将该散列作为本地数据库中的一个键,其中的值为它需要存储的所有信息。

防止篡改实际上是一项合法的工作,而不是一项失败的事业。密码学专门用于此练习。我坚持我的概念-文件系统很糟糕,我不喜欢本机会话。不管怎样,这就是许多大型网站进行身份验证的方式。Flickr和Yahoo都这样做是为了一个事实,Rails和CodeIgniter会话实际上使用cookies。这是传递小块数据的好方法。塞伦:如果你知道密码,你只能通过改变密文来改变明文。如果随机更改密文的位,将导致cookie无法解密。你不应该让别人强迫你这样做,以确定有趣的事情,但这并不完全是一种相关的攻击。@silky,你确实可以在不知道密钥的情况下通过密文操纵明文。原因是,对于大多数分组密码操作模式,更改密文中的一位会更改明文中的相应位,并使另一个块出错。通过巧妙地这样做,您可以使乱码块变得无关,并诱使服务器对未乱码块执行您想要的操作。我认为这不会是一点一点的更改,我希望更改会在整个结果中传播。不管怎样,你希望实现什么?解密的结果将是垃圾。无论如何,我有兴趣看看这方面的例子。这篇文章的原始位置是404,但有一篇托马斯·普塔切克的文章的副本,正好解释了这种情况。我想它真正的家在那里,以防它回来。我把它们放在一个盖子很紧的罐子里。