代码之家  ›  专栏  ›  技术社区  ›  Jamie Rumbelow

其他保护cookie的方法

  •  2
  • Jamie Rumbelow  · 技术社区  · 15 年前

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

    至于为什么cookies是特别的,嗯,我不使用本机会话-我讨厌触摸文件系统。cookie是一种很快的存储数据的方法,即使有了用户身份验证,我也会将用户ID和用户名/电子邮件、签名以及随机散列一起放到cookie中,以便更好地度量。

    你用什么聪明的方法来保护你的cookie数据?

    4 回复  |  直到 9 年前
        1
  •  1
  •   Theran    15 年前

    用一个 HMAC 这是一个非常合理的方法。HMAC本质上是将一个只有您的服务器知道的秘密密钥转入散列,因此即使知道该算法的人也无法生成一个不知道该密钥就可以被识别为有效的HMAC。仅仅使用一个普通的旧散列是可以绕过的,因为攻击者可以生成自己数据的有效散列,而海洋中的所有“盐”都不能解决这个问题。

    即使您使用会话ID而不是存储有意义的值,您仍然需要注意,攻击者无法预测另一个有效的会话ID,并将其发送给您,从而劫持另一个用户的会话。我相信有一个针对hotmail的实际漏洞就是这样工作的。

    加密cookie只在你不想让用户看到的情况下帮助你。更糟糕的是,没有hmac的加密会给人一种错误的安全感,因为一个仅经过加密的cookie仍然容易被操作密文来更改明文的一部分。

    所以,总之,不要只是散列它,使用一个HMAC!

        2
  •  2
  •   Spencer Ruport    15 年前

    呃,你把用户ID存储在cookie中,并根据这个值给用户访问权限?你在自找麻烦。基于服务器会话的数据实现的存在有一个很好的安全原因:将会话标识符存储在cookie中,并从服务器上客户机无法篡改的记录中访问用户ID。

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

        3
  •  1
  •   Noon Silk    15 年前

    对于散列,您需要非常小心地包括一个salt,否则确定匹配的散列可能很简单。

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

    --编辑

    您还可以了解“httponly”cookies: http://www.owasp.org/index.php/HTTPOnly

        4
  •  0
  •   RCIX    15 年前

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