用哈希签名的cookie来验证完整性。好主意?

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

我想知道用哈希签名cookie以检查它的完整性是否是个好主意?首先,我确实意识到我不应该在cookie中存储任何敏感数据,而是使用会话。这正是我的所作所为。但我仍然觉得用户能够修改甚至不那么重要的数据也不舒服。 (我有点安全的偏执:))

我提出了以下解决方案。假设我们有以下Cookie:

  • PHPSESSID
  • site_lang
  • 最近浏览过的

现在每当我更新cookie值时,我都会重新计算cookie的哈希,让我们说cookie_hash的密钥,让我们说md5(serialize($_COOKIE)+$secret)的值,我唯一没有使用PHPSESSID进行计算和验证哈希,因为它不是由CookieManager类管理的(我的自定义类)并且可能会使用新的会话ID和损坏的哈希刷新。我担心的是,如果某些第三方软件包设置了自己的cookie,当然绕过了我的CookieManager。它会崩溃哈希。所以这是一个好主意吗?

php validation security cookies hash
2个回答
2
投票

MD5对此很弱,你提出的方案(hash(data||secret))无论如何都有缺陷。密码学很难,请不要试图想出你自己的。 :)

您可能正在寻找的是已经发明的,它被称为消息认证。看看像HMAC这样的东西,这是做一些非常相似的事情的正确方法。

在大多数情况下,验证cookie值在Web应用程序中没有意义,并且不提供额外的安全性,但有时会出现这种情况。你上面的例子似乎并非如此。 :)例如,会话ID已经是加密随机的,如果用户更改了其他两个通常没有任何损害(但在非常特殊的情况下,他们可能会,但我不能提出一个合理的例子)。如果某些事情很重要并且不应该被客户端(用户)更改,那么它应该存储在服务器端会话中。

但是,您可能决定在客户端上将应用程序状态存储在加密和/或经过身份验证的cookie中,其中一个原因可能是服务器上的无状态应用程序(例如,参见Ruby on Rails中的默认会话管理),在这种情况下确实是解决方案,但它有自己的一套风险(就像服务器端会话一样)。

请注意,只要您在客户端上存储状态,就会重放除保密和真实性之外的其他威胁。这也会影响你的想法。如果用户可以更改last_viewed cookie,但您仍然不希望将其放入会话中,则说明您的应用程序存在问题。您正确地验证了cookie,甚至加密它,客户端无法访问。但是,如果在某个时刻,用户保存了cookie,并在不同的会话中重放它呢? (好吧,你的例子试图立刻保护所有的cookie,这可能会让这更难一点,但你明白了,重播仍然是一个潜在的问题。)

所以简而言之,你很可能不需要这个,但如果你这样做,那么使用正确的消息认证(类似于authenticated encryption,或类似HMAC的适当MAC)。


0
投票

我不知道你在PHP和Web开发中有多深入,所以如果我的答案水平很低,请原谅我。

如果您是偏执狂,您应该阅读有关PHP,会话,cookie,散列算法等的更多信息。

例如:

PHP session handling

PHP session configuration

PHP session security

有了这个,你可以修改你的会话和你的处理一点点服务你的偏执狂。

顺便说一句,你不应该使用像md5这样的东西来使你的web应用程序更安全。


如果我理解你想要做什么,你想要将序列化会话数组的散列加上一个秘密/盐写入会话,以验证会话及其数据的完整性。

如果这是你的动机,你真的应该重新思考,至少在我看来。

会话只是服务器上的一个文件(在用户系统上,它是firefox或其他东西的sqlite数据库中的数据库条目,但没有你写入cookie数组的数据,那些数据只是写入服务器)和会话ID是服务器上此数据的文件名/路径,但会话保存在数据库中。

因此,使用您的方法,您只需保存该值,以验证要验证的相同数据(在服务器上)中数据的完整性。

你想在哪里保存秘密?

我认为这有点无用。

根据您的需求和应用程序的需要,您可以搜索关键字会话TAN,您可以设置一个额外的cookie,其中包含您在会话中保存的随机值以相互验证,您可以保存并检查IP(取决于您所在国家/地区的法律以及您的用户连接方式),缩短会话生命周期等。

您还可以设置会话指令,例如session.cookie_httponly(如果您不想通过JavaScript等脚本语言访问会话cookie,我推荐使用这个指令),您可以在上面的链接上找到它们等等。

有些事情是信仰问题,有些事情是显而易见的。

深入挖掘并了解技术如何在幕后工作,您可以自己做出更轻松的决定。

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