Session 将会话标识符作为查询字符串参数传递

Session 将会话标识符作为查询字符串参数传递,session,cookies,security,session-cookies,Session,Cookies,Security,Session Cookies,例如,在客户端和服务器之间的长时间/连续轮询或正常请求期间,会话ID作为查询字符串参数而不是存储在cookie中的值发送/传递给服务器时,是否有任何安全实践/技术/注意事项 我可以想象会话劫持或嗅探,当有人从查询字符串中偷走这个会话ID并用它来冒充自己,但我认为cookie值也可能发生同样的情况,我想只有使用https才能防止这种情况。当将会话令牌作为URL参数传递时,您需要特别担心的两件事是浏览器历史记录和服务器日志。URL参数通常存储在两者中,然后以明文形式公开,无论您是否使用SSL 例如,

例如,在客户端和服务器之间的长时间/连续轮询或正常请求期间,会话ID作为查询字符串参数而不是存储在cookie中的值发送/传递给服务器时,是否有任何安全实践/技术/注意事项


我可以想象会话劫持或嗅探,当有人从查询字符串中偷走这个会话ID并用它来冒充自己,但我认为cookie值也可能发生同样的情况,我想只有使用https才能防止这种情况。

当将会话令牌作为URL参数传递时,您需要特别担心的两件事是浏览器历史记录和服务器日志。URL参数通常存储在两者中,然后以明文形式公开,无论您是否使用SSL

例如,如果最终用户要从浏览器复制并粘贴到Twitter,他们也可能会意外地暴露出来

听起来你不是在谈论正常的浏览。但如果是,则强烈建议不要使用URL参数

您还提到了轮询,但根据我的经验,如果cookie可用,那么它将在轮询请求中发送,而不需要在URL中

对于服务器到服务器的通信,您仍然需要担心ID是否保存在服务器日志中


我所听到的关于在URL中使用会话令牌的唯一论点是为了容纳禁用cookie的用户。我宁愿假装那些用户不存在

当将会话令牌作为URL参数传递时,需要特别关注的两件事是浏览器历史记录和服务器日志。URL参数通常存储在两者中,然后以明文形式公开,无论您是否使用SSL

例如,如果最终用户要从浏览器复制并粘贴到Twitter,他们也可能会意外地暴露出来

听起来你不是在谈论正常的浏览。但如果是,则强烈建议不要使用URL参数

您还提到了轮询,但根据我的经验,如果cookie可用,那么它将在轮询请求中发送,而不需要在URL中

对于服务器到服务器的通信,您仍然需要担心ID是否保存在服务器日志中


我所听到的关于在URL中使用会话令牌的唯一论点是为了容纳禁用cookie的用户。我宁愿假装那些用户不存在

除了Jason提到的风险之外,第三个风险是会话令牌可能通过Referer:header泄露给其他站点。我不建议将会话令牌作为查询字符串参数发送。

除了Jason提到的风险之外,第三个风险是会话令牌可能会通过Referer:头泄露给其他站点。我不建议将会话令牌作为查询字符串参数发送。

谢谢Jason的回答。我想传递会话,或者我更愿意在url中称之为客户端ID,因为我想创建一个长轮询服务器,用于两个或多个不同的应用程序使用相同的轮询服务器,并且有不同的用户通过这些应用程序连接。如果我使用存储在cookie中的会话ID,那么可能会出现身份冲突,因为在轮询过程中,相同的cookie会被发送回服务器。如果您的会话令牌足够长并且足够随机,那么我认为其中两个相同的机会(虽然技术上可能)将是天文数字。如果您仍然关心它,那么也许您可以让请求包含一个applicationid,它可以在URL中显示。然后使用applicationid和会话令牌进行区分。我的意思是,主要问题在于cookie名称,它与轮询服务器具有相同的名称,而不是唯一的会话ID。当来自应用程序A的用户连接时,其会话ID设置为此cookie值。当连接应用程序B的用户时,其会话ID将在现有cookie中被覆盖,因为它具有相同的名称。所有这些应用程序和轮询服务是否都从同一域运行?在不同的主机上?例如,appA.domain.com、appb.domain.com、polling.domain.com。如果是,,然后,您应该能够创建Cookie,以便在设置Cookie时使用“域”属性,使它们不会冲突和相互覆盖。应用程序位于不同的域上,它们都与同一轮询服务器通信。轮询服务器也可以在不同的子域上侦听,以克服浏览器特定的并行连接限制,但后端程序是相同的。cookie名称相同的原因是,当轮询请求到达轮询服务器时,它不知道应该检查哪个cookie以获取会话ID,因为在检索会话ID之前,请求及其会话/客户端都没有标识。谢谢Jason的回答。我想通过会话,或者我更愿意称之为cli
url中的ent ID,因为我想创建一个长轮询服务器,用于两个或多个不同的应用程序使用相同的轮询服务器,并且有不同的用户通过这些应用程序连接。如果我使用存储在cookie中的会话ID,那么可能会出现身份冲突,因为在轮询过程中,相同的cookie会被发送回服务器。如果您的会话令牌足够长并且足够随机,那么我认为其中两个相同的机会(虽然技术上可能)将是天文数字。如果您仍然关心它,那么也许您可以让请求包含一个applicationid,它可以在URL中显示。然后使用applicationid和会话令牌进行区分。我的意思是,主要问题在于cookie名称,它与轮询服务器具有相同的名称,而不是唯一的会话ID。当来自应用程序A的用户连接时,其会话ID设置为此cookie值。当连接应用程序B的用户时,其会话ID将在现有cookie中被覆盖,因为它具有相同的名称。所有这些应用程序和轮询服务是否都从同一域运行?在不同的主机上?例如,appA.domain.com、appb.domain.com、polling.domain.com。如果是,,然后,您应该能够创建Cookie,以便在设置Cookie时使用“域”属性,使它们不会冲突和相互覆盖。应用程序位于不同的域上,它们都与同一轮询服务器通信。轮询服务器也可以在不同的子域上侦听,以克服浏览器特定的并行连接限制,但后端程序是相同的。cookie名称相同的原因是,当轮询请求到达轮询服务器时,它不知道应该检查哪个cookie以获取会话ID,因为在检索会话ID之前,请求及其会话/客户端不会被识别。cookie值也可能发生同样的情况-仅供参考,这不是真的,cookie不会面临同样的风险。仅供参考-用于在许多网站上维护会话的HTTP cookie很容易被攻击者通过中间计算机或访问受害者计算机上保存的cookie窃取。请参阅HTTP cookie盗窃。yojimbo87,我不明白你最后的评论是什么意思。你读过这里的答案了吗?我会用另一种方式再说一遍,以防我最初的评论过于简洁。查询参数可能以cookie不会被泄漏的方式泄漏。查询参数受到cookie不受的其他风险的影响。只需阅读下面的答案就可以看到一些例子,例如,Referer,服务器日志。@D.W:你在我的原始文本的评论部分引用了我的话,我说存储在cookie中的会话ID也可能成为会话劫持的目标,你说这不是真的,根据许多来源,这是真的,我的问题的最后一句话是说会话ID在这两种情况下都可能被劫持,因此,我并不是说所有其他查询字符串风险也适用于cookie。至少这是我对你第一次评论的初步理解。如果你指的是答案中描述的不真实的其他风险,那么我同意。我知道这已经晚了,但@D.W.基本上是正确的,因为将会话信息保留在cookie存储中所暴露的风险或多或少是将会话信息保留在查询字符串参数中所暴露风险的严格超集。这两种方法仍然存在一些共同的风险,但在大多数情况下,与任何类型的查询字符串参数解决方案相比,在实施良好的cookie存储中,风险得到了更好的缓解。cookie值也可能发生同样的情况-仅供参考,这不是事实,cookie不会面临同样的风险。仅供参考-用于在许多网站上维护会话的HTTP cookie很容易被攻击者通过中间计算机或访问受害者计算机上保存的cookie窃取。请参阅HTTP cookie盗窃。yojimbo87,我不明白你最后的评论是什么意思。你读过这里的答案了吗?我会用另一种方式再说一遍,以防我最初的评论过于简洁。查询参数可能以cookie不会被泄漏的方式泄漏。查询参数受到cookie不受的其他风险的影响。只需阅读下面的答案就可以看到一些例子,例如,Referer,服务器日志。@D.W:你在我的原始文本的评论部分引用了我的话,我说存储在cookie中的会话ID也可能成为会话劫持的目标,你说这不是真的,根据许多来源,这是真的,我的问题的最后一句话是说会话ID在这两种情况下都可能被劫持,因此,我并不是说所有其他查询字符串风险也适用于cookie。至少这是我对你第一次评论的初步理解。如果你所说的“不真实”是指答案中描述的其他风险,那么我同意。我知道这已经晚了,但是 @D.W.基本上是正确的,因为通过将会话信息保存在cookie存储中而暴露的风险或多或少是通过将会话信息保存在查询字符串参数中而暴露的风险的严格超集。两者仍然存在一些共同的风险,但在大多数情况下,与任何类型的查询字符串参数解决方案相比,在实现良好的cookie存储中,风险得到了更好的缓解。