有关Cookie,你所要知道的

admin 2023年1月14日16:10:19评论19 views字数 3655阅读12分11秒阅读模式

主要记录Cookie的一些笔记

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

前言

HTTP是一个无状态协议,这意味着它不能区分来自同一台计算机或网络或用户的两个连续请求。由于这个原因,用户无法维持其会话。

没有用户账户,没有定制,等等,如果有任何用户账户,你需要一次又一次地登录来访问每个页面。

为了解决这个问题,cookie登场了,主要由你访问的网站创建的小文件, 它们由网络应用程序生成并存储在你的网络浏览器中,以键值对的形式存在。

比方说:

PHPSESSID: xyjaez1081lze23, lang: en

举个例子来理解一下:

假设你去了一家商店,带回了一些瓷器。当你到家时,你发现其中一个坏了。于是,你去找店主,并告诉他问题。但无奈的是,他回答说他不认识你。这就是没有cookie的HTTP的最初状况:网络服务器不认识你

他们可用于各种用途,比如:

  • 记住你的语言偏好。例如,上面的lang cookie,已被设置为en。由于它们已经被保存在你的浏览器上,所以会被发送到首先保存它的网站。这个网络应用程序将对其进行解析,并向你发送一个英文版本的网站。
  • 为了记录你的相关信息。它们也可以用来记录你的国家、城市等。
  • 记录你访问一项免费服务的次数。
  • 保留你的会话数据

Cookie中使用的不同flags是什么?

它们可能是小文件,但每个cookie本身就有复杂的结构。使它变得复杂的是每个cookie可能存在的不同标志。这些标志只不过是用于不同目的的cookie的属性。

有关Cookie,你所要知道的

让我们简单了解一下所有的flags。

  • Secure: 它可以被设置为true或false。如果设置为 "true",cookie将只在连接为HTTPS时发送。
  • HttpOnly:如果设置为 "true",客户端的JavaScript将不能访问该cookie。使其免受窃取cookie的XSS攻击。
  • Domain:包含可以向其发送cookie的域或子域.
  • Path:cookie中的path是cookie生效的范围,一般场景下cookie是服务器返回给客户端的一段数据,并且在该cookie的作用域内,每次请求都会在请求头中自动带上该cookie。而path就是这个cookie的作用域范围。举个例子:
    /fileUp/userLogin下创建的cookie默认path是/fileUp/userLogin。此时请求/fileUp/userLogin/aa会带上该cookie,但访问/fileUp/aa则不会
  • Expires:用来定义cookie的有效性。
  • SamePath:用于定义跨站请求期间何时可以发送Cookies的条件。

什么是域属性,它在Cookie中是如何被使用的?

现在让来解释一下cookie的域属性。顾名思义,它是用来保存域和子域名称的。然后,浏览器可以利用它来确定需要从哪个域/子域发送cookie,以及需要避免从哪个域发送cookie。

也可以把它看成是对cookie范围的设置。一个网络应用可以有多个子域,每个子域可以设置自己的cookie。

假设网站www.example.com 有4个子域,每个子域都在不同的框架上运行不同的网站。他们设置了自己的cookie。

具体看下表:

Sub-domain Cookie(Key:Value)
www.example.com PHPSESSID:wwwexample1, domain:www.example.com
sub1.example.com JSPSESSID:sub1example2
sub2.example.com lang:en,domain:sub2.example.com
sub3.example.com Usertype:nonadmin,domain:sub3.example.com
sub4.example.com Country:India, isloggedin:false,domain:sub3.example.com

各个子域的Cookies

如果你访问www.example.com,网络应用将为你提供PHPSESSID:wwwexample1,作为一个cookie。cookie将会被浏览器保存起来,当你发送请求回到www.example.com的时候,你的浏览器将向网络服务器发送完全相同的cookie。基本上,它识别了cookie中的域属性,如果你访问的是cookie中提到的同一个域,cookie将被包含在请求中。

如果你访问sub1.example.com,网络应用将设置类似JSPSESSID:sub1.example2这样的一个cookie。虽然域名是相同的,也就是example.com,但子域名是不同的。因此,如果你向sub1.example.com发送请求,你的浏览器会将JSPSESSID:sub1example2作为一个cookie发送给网络服务器。

上面这段话有点啰嗦了,这里小结一下:
Domain决定Cookie在哪个域是有效的,也就是决定在向该域发送请求时是否携带此Cookie,Domain的设置是对子域生效的,如Doamin设置为 .a.com,则b.a.com和c.a.com均可使用该Cookie,但如果设置为b.a.com,则c.a.com不可使用该Cookie。Domain参数必须以点(".")开始。


SameSite属性:

先了解一下什么是第一方和第三方cookie:

第一方cookie是由一个网站设置的,该网站的名称与当前访问的域名相同,显示在浏览器的地址栏中。这个比较好理解,用户A访问目标网站a.com,而后a.com 返回了一个cookie(假设为id=aaa),那么当前id=aaa即为第一方cookie;

说到第三方cookie,就不得不谈到CSRF,这里也举个例子:

举例来说,用户登陆了银行网站your-bank.com,银行服务器发来了一个 Cookie。

Set-Cookie:id=a3fWa;

用户后来又访问了恶意网站evil.com(一般为钓鱼网站),上面有一个表单:


<form action="your-bank.com/transfer" method="POST">
  ...
</form>

用户一旦被诱骗至钓鱼网站,就会发送这个表单,银行网站就会收到带有正确 Cookie 的请求。为了防止这种攻击,表单一般都带有一个随机 token,告诉服务器这是真实请求。


    <form action="your-bank.com/transfer" method="POST">
      <input type="hidden" name="token" value="dad3weg34">
      ...
    </form>

这种由第三方网站引导发出的 Cookie,就称为第三方 Cookie(也就是说你是在他人的引导之下登陆的,而不是直接导航至目标页面登陆的)。

它除了用于 CSRF 攻击,还可以用于用户追踪。

比如,Facebook 在第三方网站插入一张看不见的图片。

<img src="facebook.com" style="visibility:hidden;">

浏览器加载上面代码时,就会向 Facebook 发出带有 Cookie 的请求,从而 Facebook 就会知道你是谁,访问了什么网站。

Strict

Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。

Set-Cookie: CookieName=CookieValue; SameSite=Strict;

这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 Cookie,跳转过去总是未登陆状态。

Lax

对于那些希望用户从外部链接登录后仍能继续登录的网站来说,Lax值是安全和可用性之间的一个很好的平衡。大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。

<a href="..."></a>

<link rel="prerender" href="..."/>

<form method="GET" action="...">

结论

Cookie在使网络有状态方面做出了重大贡献,但它们也增加了攻击面。攻击者可以利用它们来获得对特权功能的控制,执行SQL注入、会话劫持和账户接管。当然,所有这些在很大程度上取决于应用程序的类型和网络应用程序提供的功能及其对cookies的依赖。

为什么会写这篇文章,后面会有一篇文章专门讨论有关Cookie的漏洞,仅此而已,此当后话.

原文始发于微信公众号(迪哥讲事):有关Cookie,你所要知道的

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月14日16:10:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   有关Cookie,你所要知道的https://cn-sec.com/archives/1515577.html

发表评论

匿名网友 填写信息