我可以禁止在服务器请求时自动发送cookie吗?

时间:2013-08-08 22:33:44

标签: security cookies session-cookies

我对网站开发很新。我正在一个用户使用用户名/密码登录的站点上工作,并从服务器获取一个sessionID作为响应。每个请求都会将此会话ID发送回服务器(并返回一个新的会话ID)。

如果用户在多个标签页或窗口中打开网站,我希望网站正常运行。即,一旦在一个选项卡中登录,在另一个选项卡中打开仅限成员的URL就可以在没有登录的情况下工作。(并且,在一个选项卡中注销会从所有选项卡中注销。)我认为如果不将最新的sessionID存储在一个选项中,就无法执行此操作。曲奇饼。这样,最新的sessionID可以在所有选项卡中“共享”。

然而,我开始阅读有关cookie和security threats的一些内容。我不知道每次请求都会发送cookie。我不需要将我的cookie发送到服务器。 sessionID被添加到xhr请求的标头中 - 不作为cookie读取。所以我想知道是否有办法禁止发送此cookie。我唯一的目的是允许同一浏览器中的多个选项卡/窗口共享同一个会话。

我正在阅读path parameter for cookies。显然,这可以用来限制cookie何时被发送到服务器?如果我将路径设置为永远不会被使用的东西怎么办?这会阻止cookie自动发送出去吗?我只想从JavaScript访问它。

同事已经在此应用程序的服务器端提供了许多安全措施,我不会在此处讨论。所以这个问题只是关于我能够和应该采取哪些客户端预防措施,特别是使用cookie,以获得最佳安全性。如果有更好的方法允许仅限会员的网站正常工作,同时打开多个标签,我会全力以赴。

3 个答案:

答案 0 :(得分:5)

我刚才发现在HTML 5中有local storage,它存储的键值/值对很像cookie,但不会随每个服务器请求一起发送。由于除IE 7及更早版本之外的所有浏览器都支持它,因此我将切换到此选项以启用标签之间的共享数据,并在IE 7及更早版本中使用cookie。

答案 1 :(得分:1)

sessionID存储在cookie中,无需管理它。因为HTTP协议是无状态的,所以维持状态的唯一方法是通过cookie。设置会话值时会发生什么,服务器将查找与该cookie ID相关联的项目字典(会话ID)。

无状态的含义是请求HTTP之间不知道您是否还活着或已关闭浏览器。因此,对于每个请求,浏览器都会将所有cookie值附加到域上的请求中。 SessionId在进入您的网站时会自动存储在Cookie中。然后,服务器使用该值查找您在用户会话中设置的任何内容。

根据您使用的编程语言和/或服务器,会话可以采用不同的方式处理,但通常会从程序员那里抽象出来。

现在关于会话,有许多不同的东西使他们不安全。例如,如果攻击者能够获得会话cookie值,他们就可以重播该cookie并接管您的会话。因此,会话不是存储用户信息的非常安全的方式。相反,大多数人所做的是使用用户详细信息创建加密的cookie值,cookie可以是“会话cookie”,这意味着一旦用户关闭其浏览器窗口,cookie就会被抛弃。加密的cookie包含用户信息和角色信息以及一些标识符(通常是客户端IP地址),以验证提交请求的用户是否是发出cookie的用户。在大多数编程语言中,有一些工具可以帮助抽象出来(例如ASP.NET成员资格提供者模型)。

首先查看维基百科上的HTTP协议和HTTP cookie的一些细节

并查看ASP.NET上的成员资格提供程序模型,它是帮助保护您的网站的一个非常好的工具。

http://msdn.microsoft.com/en-us/library/sx3h274z(v=vs.100).aspx

答案 2 :(得分:1)

防止浏览器发送cookie似乎首先打败了使用cookie的目的。

如果您不希望随每个请求发送sessionID,为什么要设置Cookie?更好的解决方案是使用从服务器发送到浏览器的自定义响应标头 - 这将由您控制,并且不会随所有浏览器请求自动发送。您正在使用请求标头发送您的sessionID,因此您可以使用自定义标头从服务器接收它们,并将其从每个XHR读入您的JavaScript。