8

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

如何安全地实现这一点?

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

请提供要求,可能是数据库布局、注意事项、提示和技巧。

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

4

3 回答 3

8

阅读改进的持久登录 Cookie 最佳实践(文章和评论)。

于 2009-03-26T11:11:25.197 回答
3

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

这很简单:

  1. 用户登录。
  2. 服务器向用户发送一个过期日期在很远的将来的 cookie。
  3. 如果需要,可以记录用户的 IP。
  4. 用户请求另一个页面。
  5. 服务器检查 cookie(可能是与 cookie 一起存储的 IP),查看用户是否已登录,并为页面提供服务。

一些安全注意事项:

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

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

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

不要在 cookie 中存储任何信息。只需在此处存储一个随机数并将属于它的信息存储在数据库中的服务器上。(当然,偏好颜色等非敏感信息可以存储在 cookie 中。)

于 2009-03-26T11:16:39.100 回答
2

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

于 2009-03-26T11:06:56.003 回答