建议我使用会话进行跨页面存储,并通过将会话ID存储在GET参数或cookie中来维护会话ID。
将数据保存到会话并使其永久持续(如登录信息)最安全的方法是什么?
答案 0 :(得分:1)
不确定我完全理解你的问题,但你可能会混淆两件事。禁用cookie时,sid
GET参数将用作后备会话ID。 GET参数和cookie都做同样的事情,但是将会话ID存储在cookie中不会使URL混乱,这就是为什么这是首选方法。
在PHP中使用$_SESSION
存储会话数据时,数据仅在内部存储 。它不会传输到用户的浏览器。只有包含会话ID的cookie(或sid)才会离开服务器。
答案 1 :(得分:1)
会话是PHP中的标准功能。从this page开始,阅读有关如何在PHP中处理会话的一些细节。无论如何,请注意,即使会话也不是100%安全。甚至关于会话也存在许多安全问题(您可以阅读有关session security,Session Fixation,Session Poisoning的内容以了解会话的安全隐患。
答案 2 :(得分:1)
cookie和会话之间的主要区别在于会话数据存储在服务器端,而cookie数据存储在客户端。但是,由于在服务器和客户端之间发送敏感数据意味着重大的安全问题(数据篡改,窃听等),因此数据应该存储在服务器端。
但是要将客户端与会话相关联,您需要某种标识符。这就是会话ID开始使用的地方。因为HTTP是stateless(即每个请求都是与任何先前请求无关的独立事务),所以没有本地方法仅通过其请求来识别客户端。
因此,不是将数据存储在客户端的cookie中,而是将其与每个请求一起发回,您只需将会话ID存储在客户端,并将其与每个请求一起发回。这样更安全,因为敏感数据不是通过线路发送的。所有发送的都是会话ID(这里您也可以使用URL或cookie)。
但现在,由于会话ID是将客户端关联到会话的唯一信息,因此会话ID已成为需要保护的某种敏感数据。在这里,您需要某种session authentication and management来避免对会话的攻击。</ p>
答案 3 :(得分:0)
想象一个社区,用户发布链接和外部图像。
为了使会话保持活动状态,页面使用GET而不是cookie。
因此:用户观看外部图像或点击外部链接。 外部资源的所有者现在可以读取REFERER,这样他就可以看到会话ID并劫持会话。
这就是大多数社区和类似页面在页面和外部资源之间放置代理的原因,如果它通过GET存储,它们会删除SESSION-ID。<edited/>