4

我正在使用 PHP 创建一个登录系统,我想知道:为什么需要会话?

如果我使用 userid 和 sessionid 存储一个 cookie,它不会对存储一个带有 userid 和密码哈希的 cookie 带来完全相同的安全风险(假设密码哈希足够强)?是的,有人可能会窃取 cookie,但如果他们窃取 sessionid cookie 不一样吗?

有人能告诉我在每个(相当安全的)登录系统中使用会话的原因是什么吗?

4

6 回答 6

3

会话的好处之一是您可以在每次有人登录时生成一个新会话,甚至可以在用户访问期间定期生成一个会话。如果您只是使用用户 ID 和密码的一些哈希值,那么一旦有人窃取了您的 cookie,他们就可以无限期地以您的身份登录。会话到期。

于 2010-07-30T16:34:16.603 回答
1

与其创建哈希,不如加密会话 id,以便您可以解密它并查看它是否超时。

如果您还将它绑定到 IP 地址,那么您可以使其更安全。

或者,您可以让用户登录他们想要访问的每个页面。

一旦解决方案是拥有一个实际获取用户所有信息的 javascript 应用程序,因此,用户名/密码存储在 javascript 中。然后,对于每个页面请求或交互,传递用户名/密码或作为某些初始身份验证结果的令牌,该令牌也如上所述加密。

那么你就不需要会话了,如果用户关闭那个选项卡,他们的信息就消失了,所以没有安全风险。

会话 ID 比让 javascript 做所有事情更简单,因此,大多数人选择会话,但您不必这样做。

于 2010-07-30T16:43:56.243 回答
1

您描述了一种设计,其中在每个页面请求上验证用户凭据,并且登录表单仅用于将这些凭据存储在浏览器中。我发现这种不寻常的方法存在几个问题:

  • 您在每个HTTP 请求上传输敏感信息。
  • 为了验证凭据,您可能必须运行数据库查询,并且一次又一次地执行此操作。
  • 您必须验证凭据才能知道请求来自谁。
  • 具有相同凭据的同时连接将共享数据[参见附录]

更典型的做法是验证用户一次(可能使用加密通道或散列信息)并在指定时间内记住它。

无论如何,会话和 cookie 是完全不同的工具。Cookie 是客户端存储,而会话是服务器端。它们只是相互关联,因为最典型的会话实现使用 cookie 来存储会话 ID(由于 HTTP 是无状态协议,因此您需要这些技巧来跟踪来自谁的请求)。服务器端存储的好处是您可以完全控制它:

  • 您可以根据需要使用尽可能多的空间。
  • 您可以使用所需的任何数据格式。
  • 您可以保留不希望用户看到或破坏的敏感数据或内容。
  • 你可以信任信息,因为把它放在那里。

附录

在经典会话系统中,您在会话开始时分配一个随机 ID,注册用户可以在不同的计算机上同时拥有多个会话实例(甚至在一台计算机上,例如,一个在 Firefox 中,三个在 Chrome 隐身模式窗口中)。如果您仅通过用户名识别访问者,则该用户将只有一个会话:如果他回家吃午饭,他会找到他在工作中留下的会话,如果他与朋友分享他的密码,他会看到他的朋友是什么正在做。这可以被认为是一个错误或一个特性,当然,有很多技巧可以防止它。只要考虑到它。

于 2010-07-30T16:54:55.133 回答
0

您可以将 Cookie 设置为立即过期,如果您愿意,也可以设置为一年后过期。当浏览器关闭时,会话立即过期。因此,它们通常更安全。在这种特定情况下,实际上没有什么区别——除了到期时间的长短,以及一个“物理”存储在客户端计算机上,而另一个存储在内存中的事实。

于 2010-07-30T16:34:20.800 回答
0

因为是更安全的时期。

通过会话,信息存储在服务器中,因此如果有人仍然需要任何类型的信息,则需要另外几个步骤。使用 cookie,任何人都可以直接从本地机器获取信息,而无需服务器请求。

于 2010-07-30T16:42:27.637 回答
0

如果我使用 userid 和 sessionid 存储一个 cookie,它不会对存储一个带有 userid 和密码哈希的 cookie 带来完全相同的安全风险(假设密码哈希足够强)?是的,有人可能会窃取 cookie,但如果他们窃取 sessionid cookie 不一样吗?

是的,这可能是一个类似的风险。出于以下几个原因,可能会认为窃取 cookie 没有那么严重:

  • 会话 cookie 的生命周期较短。
  • 用户经常在站点之间回收用户名/密码,如果他们的凭据被截获,这可能会使他们暴露更多。
  • 会话实际上可能不允许用户做与用户名/密码相同的事情;例如,网站可能会要求用户在某个时候重新输入他的凭据。
  • 该站点可能会将会话有效性限制为一个特定的 IP。

但是,是的,在某些情况下,会话 cookie 被盗可能与用户名/密码被盗一样严重。为了防止凭据被盗,您必须加密 (https) 用户和 Web 服务器之间的所有流量(甚至在他们进行身份验证之前,否则主动攻击者可能会更改action用户输入凭据的表单提交,以便使它们不会通过安全渠道发布)。

于 2010-07-30T16:47:03.977 回答