在网站中存储和检索会话数据的安全方法是什么?在明白为什么它不起作用之前,我很遗憾地相信以下方法:
将所有内容存储在名称为随机生成的字符串的会话变量中:
// 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;
将随机生成的字符串发送给我的用户。
在客户端,使用随机生成的字符串作为POST
参数向我的服务器发送请求。
但后来我意识到这只会像PHP的会话ID cookie(或者您正在使用的任何语言/框架的cookie)一样安全,我想这是通过明文发送的。会话ID和随机生成的$id
一起是攻击者访问$my_complex_object
所需的一切。它们都可以免费提供给攻击者。
那么,有人能告诉我一种实际有用的方法吗?也许有一种安全的方式来设置cookie。
注意:我没有设置PHP标记,因为我只是偶然使用PHP。如果您想在最喜欢的语言/框架中给我一个例子,请随时这样做。
编辑:好像我原来的问题不够明确。
让我们假设我们要生成一个HTML表,每个表的行对应一个产品,并且包含指向“有关此产品的更多信息”页面的超链接。因此,我会做以下事情:
在table.php
中,我会生成一个包含N行的表。对于每一行,我将生成一个会话变量,其中包含有关相应产品的信息。在HTTP响应的正文中,我还会发送所述会话变量的名称。
当用户请求有关特定产品的更多信息时,他会向POST
发送more_info.php
请求,其中一个参数是相应会话变量的名称。
因此,在我的HTTP标头中,我只发送会话ID cookie,在我的HTTP正文中,我发送密钥以获取大量信息。任何花时间分析我的HTTP标头和主体结构的攻击者都可能完全劫持我的用户的敏感信息。
答案 0 :(得分:0)
例如,除了持有会话ID的cookie之外,ASP.NET会话状态永远不会向客户端发送任何内容。客户端无法访问会话变量,这些变量完全存储在服务器上。