在PHP中: 有没有办法让用户伪造一个会话变量?
是否可以安全地信任登录系统的会话变量值?
答案 0 :(得分:16)
会话数据存储在服务器上。只有会话ID在客户端和服务器之间传回。除非服务器端脚本混乱(或存在错误),否则客户端无法直接更改会话数据。但是您必须确保只有“正确”的客户端才知道会话ID,因为它将此特定客户端绑定到特定会话。例如。 (因为您提到了登录)每当执行登录(尝试)以防止session_regenerate_id()
时,请使用session fixation答案 1 :(得分:7)
会话存储在服务器上,可以存储在文件中,也可以存储在内存中。用户只拥有一个cookie,用于定义服务器上会话数据的路径(通常是某种形式的哈希值)。从理论上讲,你可以将cookie更改为其他人的哈希,但这是非常非常不可能的,除非你将它们存储为文件并且在它们过期后不删除它们,在这种情况下,某人利用旧会话的可能性会增加。 / p>
答案 2 :(得分:4)
是..这叫做会话伪造/劫持。
您可以更改会话cookie的值,直到获得另一个用户会话。
答案 3 :(得分:0)
为避免在会话中存储会话数据,您可以sign要保护的内容在更改之前保存,然后再将其存储在会话中,然后在从会话中检索后立即进行验证。在PHP中,此过程为reasonable simple,消除了服务器存储问题。
请注意,这不会保护会话数据不可见。如果需要此保护,您仍可以使用安全加密来避免服务器存储。请注意,几乎所有基于密钥大小的加密方案都可以在不久的将来打破。因此,如果您需要保护会话数据5年,安全选择密钥和算法可能会产生性能问题。