将用户数据存储在数据库而不是cookie中更好吗?

时间:2010-07-16 19:22:32

标签: database security cookies tampering

为什么我们不将网站访问者(订阅者)的cookie信息保存在数据库中,而不是在用户的计算机上设置文件。是的,我知道由于以下原因,我可能听起来很傻:

  1. 维护每个用户的数据库信息很困难。

  2. 当数据库服务器关闭时,可能很难检索数据。

  3. 对于每一小段信息,都要向Web服务器发出连续请求。

  4. 我的观点是,如果我们要将用户的数据存储在数据库中而不是存储在客户端计算机上的文件中,我们可以通过不允许其他组织或其他站点(甚至是黑客)来为客户端提供安全性。从cookie访问用户的信息。

    此外,我们可以跟踪用户的活动或行为。 (我的意思是,我们实际上不知道用户正在做什么(客户端活动),如数据篡改。)

    如果您觉得连续向Web服务器发送请求可能很困难,那要归功于Ajax。这为我的立场提供了一些支持:使用Ajax将请求发送到Web服务器这么简单。

    那么,将用户的敏感信息存储在数据库中而不是在用户的计算机上设置小文件是一个好主意吗?

    具体来说,我不是在谈论会议!

6 个答案:

答案 0 :(得分:6)

您的方法绝对有效,但有一个基本问题(可能是为什么首先创建Cookie的原因):识别。

如何在不询问用户名/密码的情况下识别用户A与用户B? Cookie提供了一种简便的方法来实现这种差异化。一旦识别出用户,您的积分就会完全有效。

通常,敏感信息不应存储在cookie中。这些信息最好存储在服务器端(如您所示)。

答案 1 :(得分:3)

敏感信息不应该在cookie中,我会同意你的意见。它应存储在服务器端的某个位置,可以存储在服务器本身的平面文件中,也可以存储在数据库中。

客户端计算机上您需要的是一个小cookie,其中包含对此敏感数据的一些模糊,难以猜测的引用。

恭喜!你刚刚重新开发了会话!

(如果您愿意,可以将Web服务器设置为将会话数据存储在数据库中,而不是存储在服务器上的平面文件中。)

答案 2 :(得分:2)

传统观点确实是避免使用cookie来处理敏感数据,因为它们存储在客户端上,而黑客可以修改它们并可能造成损害。然而,有一个令人信服的理由为什么cookie值得再看一下:可扩展性。很难为任意数量的云服务器提供高性能的会话数据池:

http://aws.typepad.com/aws/2012/04/scalable-session-handling-in-php-using-amazon-dynamodb.html

这是我发现的一个链接,它详细介绍了如何构建安全的cookie系统:

http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf

所以可能是旧的又是新的。

答案 3 :(得分:1)

通常我们使用cookies,因为我们不一定在其中设置任何敏感数据。如果您的应用程序确实包含您不希望任何人使用的敏感数据,那么请尽可能使用您可以使用的每个服务器端和数据库工具来解决这个问题,但并非所有应用程序和实现都需要这些方面的安全级别。设置cookie是为了方便,就是这样。

答案 4 :(得分:1)

这已经完成,或者我们将用户名,地址和信用卡信息存储在cookie而不是数据库中。您必须评估保留在数据库中的有意义以及作为cookie存储的意义。服务器性能,带宽,可扩展性 - 所有这些都必须牢记在心。 请记住,我们存储服务器端越多,我们就越需要提供客户端。

您还提到了会话 - 会话 Cookie(有点)。

答案 5 :(得分:0)

我在寻找与cookie与数据库参数相关的类似建议时遇到了这篇文章。

说,我有一些整数列表形式的用户数据,即一些书签产品,每个用户最多80个。

在数据库中,这可以转换为4个表(每种数据类型1个),因此每个用户有20行。

如果每年有一百万个唯一身份访问者,并且为了争论,70%是访客用户而不是成员,那么这可能会为一个表添加14米行,否则可能只有6米行。当然,对于访客用户来说,你可能会有一个剔除策略,但是准确管理会变得很尴尬 - 有人说用户在9个月后没有返回来查找他/她的数据。

硬币的另一面是客人数据存储在cookie中,因此存储的时间并不重要。我感谢管理两种存储方法需要做更多的工作,但这是我能想到的唯一缺点。

任何人都对此有任何意见,因为我很欣赏一些建议。