当浏览器发送未从服务器接收到的cookie时



在处理web应用程序时,我注意到一些访问者浏览器向服务器发送了以前从未从我的脚本中收到的cookie。

我的脚本只为登录的用户设置会话cookie,因此这些访问者的浏览器中保证没有设置我的cookie。

我网站上没有JS。纯HTML+CSS。

Chrome浏览器和Safari浏览器都有这种行为。

这是怎么发生的?这些饼干是什么?

我是否应该向这些访问者显示一条警告消息,提醒他们浏览器行为异常?

作为网站运营商,您可以请求在访问网站的浏览器的cookie jar中设置cookie。您可以选择在会话中强制保留这些cookie,以使您的网站正常运行(听起来就像您要求将会话cookie返回给您以保持用户登录一样)。然而,你不";拥有";cookie罐,您无法控制其他哪些cookie(包括会话cookie和持久cookie)可能与您设置的会话cookie一起呈现给您。一般来说,您的代码应该查找您期望的cookie,并忽略任何您不期望的cookie。基于"存在"而采取任何行动都不是好的做法;额外的";你没想到的cookie,因为它们不在你的控制之下。

用户是在浏览器的帮助下控制cookie罐的人。他们可以选择完全禁用cookie处理(或使用不支持cookie的客户端)。如果您发现您自己的会话cookie没有在您期望的时候返回,那么在这种情况下,最好让用户知道这是因为他们的客户端似乎不支持cookie,或者为不需要cookie的会话管理实施后备计划,但在我看来,在";额外的";收到Cookie。

由于用户控制着他们的浏览器,他们可以通过手动编辑cookie罐来在浏览器中设置他们喜欢的任何cookie。如果他们设置了一个适用于您网站的域和路径的cookie,客户端会将这些cookie与HTTP请求一起发送到您的网站。

此外,如果您的网站与其他网站共享其域的任何部分,这些其他网站可能会设置cookie,这些cookie也会显示给您的网站。例如,如果您的站点可访问:http://site1.example.com/,但另一个站点可访问http://site2.example.com/,则站点2的操作员可以设置域设置为example.com的cookie,在这种情况下,它们将同时显示给site1site2(以及example.com的任何其他子域)。

即使你的网站只能在你控制的域上访问,浏览器也有可能拥有";supercookie";阻止被禁用(在顶级域名(如".com")上设置的cookie);公共后缀";(参见https://www.rfc-editor.org/rfc/rfc6265#section-5.3),但也可以在高级浏览器设置中禁用。

为了避免通过来自其他域的cookie对您的网站进行潜在攻击,您最好验证cookie域和路径以及cookie值本身是否匹配。

我能想到的至少有三个向量可能会将额外的cookie扔到向服务器发出的请求上:

  • 在您的页面上运行的非故意脚本:XSS漏洞、恶意广告或CDN提供更改版本的文件,在您的网页上下文中运行一些JavaScript,设置cookie
  • 奇怪的客户端:没有什么能阻止人们在请求中向你的服务器发送任意垃圾,而且可以很容易地添加额外的cookie;您是否记录了关于请求头的其他内容,这些内容可能会显示这些请求很奇怪?请注意,如果有人只是在摆弄他们浏览器的cookie罐,除了更改后的cookie之外,你不会看到任何迹象
  • 奇怪的网络或代理:没有HTTPS意味着某人的请求(带有cookie头)或您的服务器的响应(带有设置的cookie头)在到达您的服务器之前可以很容易地修改;带有奇数cookie的请求是否来自特定的IP或IP范围

简而言之,cookie是通过服务器及其客户端的合作而不是某种防弹机制来工作的。

当你找到这些cookie时,你有不同的选择,也许最简单的事情(如果它们比其他任何事情都更令人分心)就是删除它们。

最新更新