计算机网络6—— http cookie

Cookie作用:

1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等)

2)跟踪浏览器的行为

3)用户自定义设置

实现方式:

当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志符号,并且在后端数据库里以其为索引添加一项(这样就能记录用户信息了),用户收到这个信息后,在之后请求阶段都带上这个头部!官方描述如下:

当服务器收到HTTP请求时,服务器可以在响应头里面添加一个Set-Cookie选项。浏览器收到响应后通常会保存下Cookie,之后对该服务器每一次请求中都通过Cookie请求头部将Cookie信息发送给服务器。另外,Cookie的过期时间、域、路径、有效期、适用站点都可以根据需要来指定

过期时间: 

会话期Cookie

是最简单的Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie也会被保留下来,就好像浏览器从来没有关闭一样。

持久性Cookie

和关闭浏览器便失效的会话期Cookie不同,持久性Cookie可以指定一个特定的过期时间(Expires)或有效期(Max-Age)。

域:

Domain 和 Path 标识定义了Cookie的作用域:即Cookie应该发送给哪些URL。

Domain 标识指定了哪些主机可以接受Cookie。如果不指定,默认为当前文档的主机不包含子域名)。如果指定了Domain,则一般包含子域名。

例如,如果设置 Domain=mozilla.org,则Cookie也包含在子域名中(如developer.mozilla.org)。

Path 标识指定了主机下的哪些路径可以接受Cookie(该URL路径必须存在于请求URL中)。以字符 %x2F ("/") 作为路径分隔符,子路径也会被匹配。

例如,设置 Path=/docs,则以下地址都会匹配:

  • /docs
  • /docs/Web/
  • /docs/Web/HTTP

是否可以link其他站点:

SameSite Cookie允许服务器要求某个cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

SameSite cookies是相对较新的一个字段,所有主流浏览器都已经得到支持

下面是例子:

Set-Cookie: key=value; SameSite=Strict

SameSite可以有下面三种值:

None

浏览器会在同站请求、跨站请求下继续发送cookies,不区分大小写。

Strict

浏览器将只发送相同站点请求的cookie(即当前网页URL与请求目标URL完全一致)。如果请求来自与当前location的URL不同的URL,则不包括标记为Strict属性的cookie。

Lax

在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者frames的调用,但只有当用户从外部站点导航到URL时才会发送。如link链接

 

其他:

1. 安全问题

会话劫持和XSS

在Web应用中,Cookie常用来标记用户或授权会话。因此,如果Web应用的Cookie被窃取,可能导致授权用户的会话受到攻击。常用的窃取Cookie的方法有利用社会工程学攻击和利用应用程序漏洞进行XSS攻击。(跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。)

如:

攻击者想拥有留言系统中后台管理员的权限,只要截取添加管理员账号时的HTTP请求信息,然后使用XML HTTP对象在后台发送一个HTTP请求即可。

怎么截取添加后台管理员账号的请求消息呢?这个不是抓包获取,是在正常添加用户时XSS代码中用 xmlhttp对象发送一个POST请求,由于该请求带上了被攻击者的Cookie并一同发送到服务端,所以能在后台悄悄地添加一个管理员账户

添加管理员请求的POST数据:UserName=12345&password=1234

XSS Shellcode:

var params ="UserName=xss&password=1234";

xmlhttp.send(params);

跨站请求伪造(CSRF)

在不安全聊天室或论坛上的一张图片,它实际上是一个给你银行服务器发送提现的请求:

<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">

当你打开含有了这张图片的HTML页面时,如果你之前已经登录了你的银行帐号并且Cookie仍然有效(还没有其它验证步骤),你银行里的钱很可能会被自动转走。有一些方法可以阻止此类事件的发生:

  • 对用户输入进行过滤来阻止XSS
  • 任何敏感操作都需要确认;
  • 用于敏感信息的Cookie只能拥有较短的生命周期;

2. 隐私问题

第三方Cookie
每个Cookie都会有与之关联的域(Domain),如果Cookie的域和页面的域相同,那么我们称这个Cookie为 第一方Cookiefirst-party cookie),如果Cookie的域和页面的域不同,则称之为 第三方Cookiethird-party cookie.)。一个页面包含图片或存放在其他域上的资源(如图片广告)时,第一方的Cookie也只会发送给设置它们的服务器。通过第三方组件发送的第三方Cookie主要用于广告和网络追踪。这方面可以看谷歌使用的Cookie类型( types of cookies used by Google)。大多数浏览器默认都允许第三方Cookie,但是可以通过附加组件来阻止第三方Cookie(如 EFFPrivacy Badger)。

PS:

唯一的标志符号:uuid怎么生成?

UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifier,Python 中叫 UUID。
它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
UUID主要有五个算法,也就是五种方法来实现。

      • uuid1()——基于时间戳。由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。
      • uuid3()——基于名字的MD5散列值。通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。 
      • uuid4()——基于随机数。由伪随机数得到,有一定的重复概率,该概率可以计算出来。
      • uuid5()——基于名字的SHA-1散列值。算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法。

参考:

官方文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

XSS和会话劫持:https://www.cnblogs.com/dolphinX/p/3391351.html

python uuid:https://www.cnblogs.com/loveapple/p/9445507.html

猜你喜欢

转载自www.cnblogs.com/Plorde/p/12308228.html