会话变量可以被欺骗(登录)?

时间:2010-03-15 07:39:22

标签: php security session login

在PHP中: 有没有办法让用户伪造一个会话变量?

是否可以安全地信任登录系统的会话变量值?

4 个答案:

答案 0 :(得分:16)

会话数据存储在服务器上。只有会话ID在客户端和服务器之间传回。除非服务器端脚本混乱(或存在错误),否则客户端无法直接更改会话数据。但是您必须确保只有“正确”的客户端才知道会话ID,因为它将此特定客户端绑定到特定会话。例如。 (因为您提到了登录)每当执行登录(尝试)以防止session_regenerate_id()

时,请使用session fixation

答案 1 :(得分:7)

会话存储在服务器上,可以存储在文件中,也可以存储在内存中。用户只拥有一个cookie,用于定义服务器上会话数据的路径(通常是某种形式的哈希值)。从理论上讲,你可以将cookie更改为其他人的哈希,但这是非常非常不可能的,除非你将它们存储为文件并且在它们过期后不删除它们,在这种情况下,某人利用旧会话的可能性会增加。 / p>

答案 2 :(得分:4)

是..这叫做会话伪造/劫持。

您可以更改会话cookie的值,直到获得另一个用户会话。

答案 3 :(得分:0)

为避免在会话中存储会话数据,您可以sign要保护的内容在更改之前保存,然后再将其存储在会话中,然后在从会话中检索后立即进行验证。在PHP中,此过程为reasonable simple,消除了服务器存储问题。

请注意,这不会保护会话数据不可见。如果需要此保护,您仍可以使用安全加密来避免服务器存储。请注意,几乎所有基于密钥大小的加密方案都可以在不久的将来打破。因此,如果您需要保护会话数据5年,安全选择密钥和算法可能会产生性能问题。

相关问题