序
网络早期最大的问题之一就是如何管理状态。简而言之,服务器无法知道两个请求是否来自同一个浏览器。当时最简单的方法就是在请求的时候在页面中插入一些参数,在下一次请求中返回参数。这需要使用包含参数的隐藏表单,或者将其作为URL参数的一部分传递。这两种解决方案都是手动操作的,容易出错。
当时的网景公司员工Lou Montulli在1994年将“cookies”的概念应用到网络通信中,以解决用户网购的购物车历史。目前所有浏览器都支持cookies。
什么是曲奇?
Cookie翻译过来就是“饼干、甜点”的意思。Cookies在网络应用中无处不在。当我们浏览以前访问过的网站时,网页可能会显示:你好,王三少,这会让我们觉得很亲切,就像吃了一块甜甜的饼干。
由于http是一种无状态协议,一旦客户端和服务器之间的数据交换完成,它将断开连接,再次请求,然后重新连接。这说明服务器没有办法只从网络连接上知道用户的身份。我该怎么办?然后,每次新用户提出请求时,用ID卡(唯一的)发出请求。下次访问,一定要带身份证,这样服务器就知道谁访问了,问了,针对不同的用户做出不同的响应。这就是曲奇的原理。
实际上,cookie是一个非常小的文本文件,由浏览器存储在用户的机器上。Cookie是没有可执行代码纯文本。存储一些服务器需要的信息,每次请求站点都会发送相应的cookie,可以用来识别用户的身份信息等功能。
如图,当用户第一次访问服务器时,服务器会返回一个唯一的识别码;Id=23451,这样服务器就可以用这个代码来跟踪记录用户的信息(购物历史,地址信息等。).
Cookies可以包含任何信息,不仅仅是id。客户端将在服务器返回的Set-cookie头中记录Cookie内容。并将cookie存储在浏览器的Cookie数据库中。当用户访问同一个站点时,浏览器会拾取该站点当时颁发的id=XXX的ID卡(cookie)并在cookie请求头中发送。
cookie的类型
根据过期时间可以分为两类:会话cookie和持久cookie。会话cookie是一个临时Cookie。当用户退出浏览器时,会话cookie将被删除,而永久cookie将在硬盘中存储更长时间。当关闭浏览器并重新启动计算机时,它仍然存在。通常,持久cookie会维护定期访问服务器的用户的配置文件或登录信息。
持久性cookie设置特定的过期时间(Expires)或有效期(Max-Age)。
set-Cookie:id = a3 fwa;expires = 2019年10月21日星期三07:28:00 GMT;
cookie的属性
cookie的域
生成Cookie的服务器可以将域属性添加到set-Cookie响应头中,以控制哪些站点可以看到该Cookie,如下所示:
Set-Cookie: name= \"王\";domain=\"m.zhuanzhuan.58.com \"
如果用户访问,将发送Cookie:name = \" Wang \";如果用户访问www.aaa.com(不是zhuanzhuan.58.com),则不会发送cookie。
cookie的路径
Path属性可以为特定于服务器的文档指定Cookie。由此属性设置的url和带有此前缀的url路径是有效的。
例如:m.zhuanzhuan.58.com和m.zhaunzhuan.58.com/user/的网址。在m.zhuanzhuan.58.com设置cookie
set-cookie:id = \" 123432 \";domain = \" m . zhuan zhuan . 58 . com \";
M.zhaunzhuan.58.com/user/饼干:
Set-cookie:user=\"wang \",domain = \" m . zhuan zhuan . 58 . com \";路径=/用户/
但是通过访问其他路径,m.zhuanzhuan.58.com/other/将获得
cookie: id=\"123432 \"
如果你去m.zhuanzhuan.58.com/user/,,你会得到
cookie: id=\"123432 \"
cookie: user= \"王\"
安全的
设置了安全属性后,只有在https协议被加密时,cookie才会被发送到服务器。但这不是最安全的。由于其固有的不安全性,敏感信息不应通过cookie传输。
set-Cookie:id = a3 fwa;expires = 2015年10月21日星期三07:28:00 GMT;安全;
Chrome 52和firefox 52一开始是不安全的(HTTP),无法使用secure:
Cookie操作
Cookie的值可以通过docuemnt.cookie来设置和获取
document.cookie = \" user = wang
console . log(document . cookie);
禁止javascript操作cookie(为避免跨域脚本(xss)攻击,标有HttpOnly的cookie不能通过javascript的document.cookie访问。)
set-Cookie:id = a3 fwa;expires = 2017年10月21日星期三07:28:00 GMT;安全;HttpOnly
第三方cookie
通常cookie的域与浏览器地址的域相匹配,这被称为第一方cookie。则第三方cookie意味着cookie的域与地址栏中的域不匹配。这种cookie通常用于第三方广告网站。为了跟踪用户的浏览历史,并根据收集到的用户浏览习惯,向用户推送相关广告。
如上图(a)所示:用户访问index.html 1号服务器的一个页面,该服务器与第三方广告网站合作。该页面还有一张ad1.jpg的广告图片,域名为www.advertisement.com。当请求这张ad1.jpg的照片时,www.advertisement.com的服务器会为用户设置一个cookie。
Set-Cookie: user= \"王\";like = \" adomain = \" advertisement.com \"
记录用户的浏览历史,并指定一个用户来代表用户的身份。
图(b):用户访问服务器2的index.html页面。这个页面也与同一个广告客户合作。该页面还包含一张ad2.jpg的广告图片,域名为www.advertisement.com。当请求ad2.jpg的这张照片时,浏览器会向www.advertisement.com发送一个cookie。
Cookie: user= \"王\";like = \" a
www.advertisement.com浏览器发送的cookie识别用户的身份,同时将用户在该页面的浏览数据设置为cookie。
set-Cookie:buy = \" b \";domain = \" advertisement.com \"
图(c):无独有偶,用户访问了3号服务器的一个index.html页面,3号服务器也与那个广告客户合作,这个页面也包含了www.advertisement.com域名下的广告地图ad3.jpg。当请求这个ad3.jpg图像时,浏览器将发送一个cookie给www.advertisement.com。
Cookie: user= \"王\";like = \" abuy=\"b \"
这样广告公司就可以根据用户的浏览习惯向用户推送合适的广告。
安全的
大多数网站使用cookie作为用户会话的唯一标识,因为其他方法都有局限性和漏洞。如果网站使用cookie作为会话标识符,攻击者可以通过窃取用户的一组cookie来模拟用户的请求。从服务器的角度来看,它无法区分用户和攻击者,因为用户和攻击者的认证是一样的。以下是一些cookie窃取和会话劫持的示例:
网络窃听
网络上的流量可以被网络上任何一台电脑拦截,尤其是未加密的开放WIFI。该流量包括在普通的未加密HTTP请求上发送Cookie。在不加密的情况下,攻击者可以读取网络上其他用户的信息,包括HTTP Cookie的全部内容,从而实施中间攻击。比如拦截cookie执行恶意任务(银行转账等。)作为用户。
解决方法:服务器可以设置cookies的安全属性,这样cookies只能通过https发送。
DNS缓存中毒
如果攻击者可以使DNS缓存中毒,那么攻击者就可以访问用户的Cookie了,例如:攻击者使用DNS中毒来创建一个虚拟的NDS服务h123456.www.demo.com指向攻击者服务器的ip地址。然后攻击者可以从服务器 h123456.www.demo.com/img_01.png 发布图片。用户访问这个图片,由于 www.demo.com和h123456.www.demo.com是同一个子域,所以浏览器会把用户的与www.demo.com相关的cookie都会发送到h123456.www.demo.com这个服务器上,这样攻击者就会拿到用户的cookie搞事情。如果攻击者可以毒害DNS缓存,攻击者就可以访问用户的Cookie。例如,攻击者使用DNS中毒来创建虚拟NDS服务。h123456.www.demo.com指向攻击者服务器的ip地址。然后,攻击者可以在用户访问此图像时从服务器h123456.www.demo.com/img_01.png.发布图像,因为www.demo.com和h123456.www.demo.com在同一个子域中,浏览器会将所有与www.demo.com相关的cookie发送到h123456.www.demo.com的服务器,这样攻击者就会获得用户的cookie并做一些事情。
一般情况下不会出现这种情况,通常是网络提供商的失误。
跨站点脚本XSS
Cookie可以通过使用跨站点脚本技术被窃取。当网站允许javascript操作cookie时,攻击者会发布恶意代码攻击用户的会话,同时可以获取用户的cookie信息。
示例:
以上就是由优质生活领域创作者 深圳生活网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:https://www.szbubu.com/3053752.html,转载请说明来源于:深圳生活网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场。