【问题标题】:What is a secure way to store and retrieve session data in a Web site?在网站中存储和检索会话数据的安全方法是什么?
【发布时间】:2011-01-30 02:07:43
【问题描述】:

在网站中存储和检索会话数据的安全方法是什么?在意识到它为什么不起作用之前,我有一段时间相信以下方法会:

  1. 将所有内容存储在名称是随机生成的字符串的会话变量中:

    // This will be the name of the session variable.
    $id = uniqid();
    
    // $my_complex_object contains sensitive information
    // I don't want to transmit over the network.
    $_SESSION[$id] = $my_complex_object;
    
  2. 将那些随机生成的字符串发送给我的用户。

  3. 在客户端,使用这些随机生成的字符串作为POST 参数向我的服务器发送请求。

但后来我意识到这仅与 PHP 的会话 ID cookie(或您碰巧使用的任何语言/框架的 cookie)一样安全,我猜它是通过管道作为纯文本发送的。会话 ID 和随机生成的$id 是攻击者访问$my_complex_object 所需的一切。攻击者可以免费使用它们。

那么,谁能告诉我一种真正有效的方法?也许有一种安全的方式来设置 cookie。


注意:我没有设置 PHP 标记,因为我使用 PHP 只是偶然。如果你想给我一个你最喜欢的语言/框架的例子,请随时这样做。


编辑:看来我最初的问题还不够清楚。

假设我们要生成一个 HTML 表格,其每一行对应一个产品,并包含指向“有关此产品的更多信息”页面的超链接。因此,我将执行以下操作:

  1. table.php 中,我将生成一个包含 N 行的表。对于每一行,我将生成一个会话变量,其中包含有关相应产品的信息。在我的 HTTP 响应正文中的某处,我还会发送所述会话变量的名称。

  2. 当用户请求有关特定产品的更多信息时,他会向more_info.php 发送POST 请求,其中一个参数是对应会话变量的名称。

所以,虽然在我的 HTTP 标头中我只发送会话 ID cookie,但在我的 HTTP 正文中,我正在发送大量信息的密钥。任何花时间分析我的 HTTP 标头和正文结构的攻击者都可以完全劫持我用户的敏感信息。

【问题讨论】:

  • 我不知道你为什么要在响应中发送变量名。这一定是脚本的事情。
  • 那么客户端可以将它们作为参数来构造进一步的请求吗?
  • 不要为此使用变量名。创建一组参数供客户端使用。使用的参数应该与代码中的变量名称无关。
  • 即使我使用一组名称与会话变量不同的参数,Web 服务器也必须能够将这些参数与会话变量相关联。从某种意义上说,这些参数是用于读取/操作这些会话变量(或基于这些会话变量的表达式)的“API”。不过没关系,原来我要问的是this,这意味着每次交换敏感信息都必须使用 SSL。

标签: web-applications security


【解决方案1】:

例如,ASP.NET 会话状态从不向客户端发送任何内容,除了保存会话 ID 的 cookie。客户端无法访问 Session 变量,这些变量纯粹存储在服务器上。

【讨论】:

  • 我觉得我说的不够清楚。我会更新我的问题。
  • 只需在查询字符串中传递参数,或从表单变量中发布它们。这就是您所说的“会话数据”吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2011-02-04
  • 2011-07-25
  • 2012-06-25
相关资源
最近更新 更多