安全地实施会话状态并“保持登录”功能

时间:2009-03-26 11:03:23

标签: security session session-state

我想提高有关会话管理的当前应用程序的安全性,我希望用户在明确注销之前登录。

如何安全地实施?

将会话信息保存在数据库中,如sessionid,ip,useragent?

请提供要求,可能是数据库布局,做与否,提示和技巧。

注意: 我知道像asp.NET,rails,codeigniter等框架已经处理好了,但这不是一个选择。实际上它是一个经典的asp应用程序。但我认为这个问题与特定语言无关。

3 个答案:

答案 0 :(得分:8)

阅读Improved Persistent Login Cookie Best Practice(文章和评论)。

答案 1 :(得分:3)

除非您使用https,否则您应该知道这样的系统无法安全。

这很简单:

  1. 用户登录。
  2. 服务器向用户发送一个过期日期过期的cookie。
  3. 如果需要,您可以记录用户的IP。
  4. 用户请求另一页。
  5. 服务器检查cookie(可能是与cookie一起存储的IP),看到用户已登录,并为该页面提供服务。
  6. 一些安全注意事项:

    如上所述,除非您使用https,否则没有安全的方法。

    如果您使用的是共享托管,请尝试找出Cookie的存储位置。它们通常位于/ tmp目录中,每个用户都可以访问并通过该人访问您的cookie。

    跟踪IP,如果您知道计算机永远不会更改它。

    不要在cookie中存储任何信息。只需在那里存储一个随机数,并将属于它的信息存储在数据库中的服务器上。 (当然,不是像首选颜色这样的敏感信息可以存储在cookie中。)

答案 2 :(得分:2)

创建一个像2030年一样荒谬到期的cookie。如果您需要会话状态,请在cookie中保留会话ID(如果安全性优先,则加密)并将其映射到数据库中的表。 IP / UserAgent等往往是元数据,cookie是会话的关键。