HTTP是一种无状态的协议-Web服务器不必保持与过去或者将来请求的任何信息。当一个Http请求到达服务器后,服务器总是这样认为的:"这小子,新来的!",但是服务器有没有理由保持用户的会话状态呢?当然有。例如,在对访问的授权中,服务器就不得不记住这些来历不明的坏小子么。通过什么手段能达到这样的目的呢?最为人熟悉的解决方案就是Cookie.下面我们就谈谈Cookie的工作原理和利弊.
1.Cookie的定义
   Cookie是一种在HTTP中对状态进行管理的方式。它是一种少量的状态数据,由We站点服务器发送给浏览器,并代表服务器存储在用户的机器上。
2.使用Cookie的动机
   服务器随其响应向浏览器发送一个Cookie,请求浏览器在随后的请求中包含此Cookie,采用这种方式,Web服务器就能在会话中跟踪用户。Cookie中的消息可能是唯一的,这样便可以单独的跟踪特定的用户,也可能是剪辑,使得服务器能够统一跟踪来自一家单位的所有用户。

比如,在一个电子商务网站中,如果没有Cookie,每当用户请求该站点的时候,都会要求用户填写一份标识自己身份的表单,这么繁琐的过程,用户会很快失去耐心。但引入了Cookie之后,这个问题就得到了很好的解决。比如在“购物车",用户将自己想要买的商品放入其中,那么Web服务器就会记住顾客想要买的商品列表,这样用户就像真的在超市一样,把自己想要的东西放入车里,等结账的时候,统一付费,当然你在购买的过程中,还可以把放入购物车的商品放回去。对用户和Web服务器来说,这无疑是一种福音。但有一句话说得好:"天下绝对没有免费的午餐",Cookie在被称为"Web上的甜饼"的同时,由于对用户隐私的影响,Cookie也成为备受争议的主题。
3.Cookie在浏览器中的使用 
 下图显示了Cookie在浏览器中的使用过程,
  
客户机将请求发送给原始服务器,原始服务器在其响应中包含一个含有Cookie值得标头(Set-Cookie),在未来所有对该服务器的请求中,客户端都会包含Cookie。注意在客户端存储Cookie的时候,并不对Cookie字符串(XYZ)进行任何的解释。服务器可以依据生成请求的客户端,相应对的剪辑字符串进行构造,并更改用于构造Cookie字符串的机制。该图也可以表明进行Cookie交互的时候,无须用户的参与,除非事先要求每当Cookie发出时,便向用户进行通知。这也就在意定程度上对用户的隐私造成了威胁。
 当用户浏览器接受到Cookie之后,起初是存放于浏览器的内存中,当浏览器退出的时候,会以磁盘文件的形式写入稳定存储器中。在这个过程中有一定的规则,如果Cookie具有的超时时间设定大于当前浏览器退出时间,Cookie会存储,如果不大于,就不必要存储,这就是有人说的设置了超时的Cookie会存储,而没有设置的Cookie只用于浏览器会话。Cookie最多4KB的长度,对于单独的浏览器来说,它为每个服务器或者域提供最多20个Cookie,总共可提供300个Cookie。
4.Cookie的隐私问题
   Cookie得到了广泛的应用,但同时被怀疑会引起对个人隐私的侵犯。开始的时候,如果浏览器设定允许Cookie,许多的用户甚至不知道他们在发送Cookie,Cookie用明文发送,而且用Http嗅探工具,也能很简单的探到Cookie信息 ,而数据包在网络中传输的时候,Cookie的信息也能够被别有用心的人修改。另外,由于服务器可能使用Cookie的一部分作为后端数据库的索引,如果对Cookie进行了修改,会造成数据库中同用户无关的那部分数据出现不为人知的改动。许多的用户不知道谁有他们的Cookie的访问权以及对Cookie信息作了些什么,例如Cookie可以在公司间共享,这样就可以被别有用心的非法出售 .
为了证明上述说法,我做了一个简单的测试程序,然后用HttpWatch这款Http嗅探工具,进行嗅探 从图中可以看出 ,能很容易的获得Cookie的值,当然如果是用户自己,那无所谓了,但是一些木马,病毒如果也能够获得,那就泄露了用户的隐私。
此外,Cookie信息由原始服务器不同的另一个服务器进行传递,问题就会变得更加严重。比如有这样一种情形,用户访问门户站点A,网址:www.a.com,A网站要收集用户的信息可以通过以下方式,设置一个专门用于收集信息的站点s.a.com,比如访问 www.a.com/1.aspx,站点A首先将该请求重定向到s.a.com,形成这样的请求 s.a.com/count.aspx?return=www.a.com/1.aspx,这样的话,s.a.com就可以将cookie的信息收集起来,然后再重定向给 www.a.com/1.aspx,但用户并不知道有这么一个繁琐的过程。就像一个人司机接受交警检查,司机出示了驾驶证,交警可能将该驾驶证传递给其他人看,然后再交回司机手里一样,这样司机的隐私信息就有更大的风险被曝漏。如图:

对于服务器而言,Cookie也可能是危险的,比如站点A是一个联盟,他下面有类似于代理的用户,并且分级别,比如代理A,代理B都属于1级代理,1级代理下面有相应的子代理,那么很可能代理A就可以偷窥到代理B的子代理信息,如果服务端权限系统不完善的话,用户A可以仿造一个代理B的标识,利用自己是一级代理的身份绕过一些系统验证,在系统疏忽后者漏洞出冒充代理B。造成对服务器和其他用户的威胁。
  Cookie无疑在web世界中充当了天使,它能够使本来没有状态的HTTP的记性变好,但同时在对用户隐私保证和对服务器潜在威胁上,它可以说是一个恶魔。
使用Cookie的时候一定要注意这样的问题是Cookie是保存在客户端的,服务端这样是删除不了Cookie的,见一哥们这样使用,Response.Cookies.Remove(Response.Cookies[0]);正确使Cookie过期的方式向客户端发送一个过期的同名Cookie即可

转载于:https://www.cnblogs.com/jillzhang/archive/2007/02/12/647913.html

Cookie-天使还是恶魔?相关推荐

  1. 孩子花掉父母两年工资,游戏你到底是“天使”还是“恶魔”?

    移动支付给生活带来便利,但对于但小雨(化名),游戏.支付两个词无疑是灾难! 湖南怀化中方县的小雨还在上6年级,一个含苞待放的年级,未来像花儿一样可期,但是他的生活却因一场疫情而改变了-- 天使VS恶魔 ...

  2. 每个人都是天使和恶魔化身的合体

    每个人都是天使和恶魔化身的合体 每个人都可以行善 每个人也都可以作恶 天使并不遥远 --她就是我们冷静后的思想 恶魔其实就在眼前 --他是我们身体的放纵 有多少天使,就有多少恶魔 有多少善行,就有多少 ...

  3. eBPF双子座:天使or恶魔?

    启示录 新约圣经启示录认为:恶魔其实本身是天使,但炽天使长路西法背叛了天堂,翅膀变成了黑色,坠落地狱,堕落成为恶魔.这些恶魔主宰著黑暗势力,阻碍人类与上帝沟通,无所不用其极.所以可以说天使和恶魔本来是 ...

  4. 天使与恶魔~“增值服务”

    今天说的是增值,在中国任何概念都可以被玩的很"邪恶".想象一下电信增值业务,移动增值业务,免费网游增值道具.. 恨不得大刀砍之,倒是怀念起以前那种点卡的网游了,一次收费,平等玩之. ...

  5. 从 Linux 安全看,eBPF 的出现是“天使”还是“恶魔”?

    [CSDN 编者按]eBPF 目前已经成了安全研究人员和黑客手中强大的工具,亦正亦邪,取决于使用者的选择. 作者 | 许庆伟    责编 | 王子彧 出品 | OpenAnolis(龙蜥) 启示录 新 ...

  6. eBPF 双子座:天使 or 恶魔?

    01 启示录 新约圣经启示录认为:恶魔其实本身是天使,但炽天使长路西法背叛了天堂,翅膀变成了黑色,坠落地狱,堕落成为恶魔.这些恶魔主宰著黑暗势力,阻碍人类与上帝沟通,无所不用其极.所以可以说天使和恶魔 ...

  7. 总会用到的系列8:基金,可能纠缠一生的天使或者恶魔

    之前写过一篇关于基金定投的文章<总会用到的系列2:你不理财财不理你的基金定投>,对于理财小白来说,基金定投算是一个比较靠谱的理财方案,我自己也定投了几个标的,效果也还不错.这篇主要反思自己 ...

  8. 人工智能:到底是天使还是恶魔?

    最近,比尔盖茨公开表态称,自己对人工智能感到担忧,而且不明白为什么有那么多人并不担心这种技术对未来的影响.两周前,马斯克和著名物理学家史蒂芬·霍金也都签署了一封公开信,呼吁在人工智能创新方面采取安全措 ...

  9. 内存泄漏——恶魔天使之战(操作内存必看)

    文章目录 前言 一.c++操作内存的优点与缺点 二.内存操作 1.指针 泄漏1: 2.开辟新空间--new 内存泄漏2: 总结 前言 不知道大家有没有听过这样一句话:一个c++程序员,内存泄漏了,一包 ...

  10. 计算机安全的基本要求是什恶魔,公考面试真题:2018年3月17日银监会(计算机岗)面试真题1...

    公务员面试如何积累热点素材.如何快速修炼自我表达能力,来听面试来了 每周一到周五,22:00准时更新 周一至周三:公考面试热点素材 周四至周五:公考面试真题解析 更多面试知识请关注新浪微博@华图在线官 ...

最新文章

  1. windows下硬盘安装mint10
  2. VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址
  3. springMVC 统一异常处理异常处理类的使用
  4. 采用HttpModules来重写URLS
  5. 前端学习(1393):多人管理项目13加密实现
  6. jQuery find() 方法的使用总结
  7. 关于lucene2.2部分代码
  8. 20180513 实参 形参
  9. 测试过程中用shell的地方_软件测试之学习shell流程控制结构
  10. lucene.net helper类 【结合盘古分词进行搜索的小例子(分页功能)】
  11. Google Chrome Your browser is not compatible with FlexPaper问题解决
  12. 10分钟看懂财务报表分析,只需掌握一个公式!
  13. python之excel多表合并
  14. 华为ensp OSPF单区域配置
  15. The server encountered an internal error () that prevented it from fulfilling this request.
  16. 如何控制舵机的速度?
  17. 字体图标的下载与使用
  18. 那些不能在一起吃的水果搭配
  19. ModelSim-Altera路径找不到或者不正确的解决办法
  20. 生鲜配送如何让“订单管理”变得简单?

热门文章

  1. CURL 发送POST请求
  2. 推特裁员大反转!马斯克哭求被裁员工回来
  3. 如何提升口头表达能力?
  4. 一道简单的ctf 分析
  5. sql无法打开键: UNKNOWN\Components\8922126C77B064F4683FF04644421772\4BE06D23D119
  6. 2022年首个交易日特斯拉股价暴涨 马斯克重回3000亿美元身价
  7. Qt界面优化:Qt窗体控件设置
  8. stm32学习笔记---ADC电压采集
  9. iOS-bug Xcode 14.3版本运行项目报错File not found: /Applications/Xcode.app/Contents/Developer/...
  10. 外汇投资有什么刷单技巧?