cookie

关于cookie的总结。

cookie的作用—管理状态

http 是无状态协议,不会记住用户的登陆状态,服务器指示在浏览器上存储用户的信息,以保证用户再次访问时能够识别,提高访问效率。cookie 是小型纯文本文件。

cookie的原理

Cookie定义了一些HTTP请求头和HTTP响应头,通过这些HTTP头信息使服务器可以与客户进行状态交互。

客户端请求服务器后,如果服务器需要记录用户状态,服务器会在响应信息中包含一个Set-Cookie的响应头,客户端会根据这个响应头存储Cookie信息。再次请求服务器时,客户端会在请求信息中包含一个Cookie请求头,而服务器会根据这个请求头进行用户身份、状态等较验。

cookie分类
  • 会话cookie
  • 持久性cookie

1、范围

  • Domain

允许哪些主机接收cookie,

未指定 -> 当前文档所在的位置,不包含子域

指定 -> 子域总包含在内

如果Domain=mozilla.org设置了,那么cookie就会包含在子域中developer.mozilla.org

Path表示请求的URL中必须存在的URL路径才能发送Cookie标头。%x2F(“/”)字符被视为目录分隔符,子目录也将匹配。

  • Path(在domain选项验证后才能比较)

例如,如果Path=/docs设置,则这些路径将匹配:

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

3、安全(secure https)

4、cookie 限制

  • Cookie数量限制
  • 总Cookie大小限制(4 KB超过该大小,将会被截断,并且不会发送到服务器)

5、解析cookie (YUICookie应用程序)使用javscript操作cookie

6、HttpOnly(一种安全措施,可帮助防止通过JavaScript窃取cookie)

cookie和 安全

会话劫持

  • 仅通过ssl 发送cookie(SSL在通过Internet传输之前在浏览器上加密请求,因此单独的数据包嗅探不能用于识别cookie值)
  • 以某种随机方式和/或基于用户信息(用户名,IP地址,登录时间等)的方式生成会话密钥
  • (如转移资金或完成购买之前)重新验证用户

Cookie窃取和XSS(跨站点脚本攻击)

  • 不要包含来自不受信任的域的JavaScript
  • 过滤掉所有用户输入的HTML或以其他方式清理输入

另:HttpOnly不允许通过javascript 的方式访问 cookie

跨站请求伪造(CSRF)

  • 输入过滤是防止CSRF攻击的重要工具
  • 需要确认任何敏感行为,验证可能包括另一个登录屏幕以提高安全性。
  • 在敏感数据系统中验证用户的Cookies应该具有较短的到期时间。在某些情况下,可能需要几分钟的过期期限。
  • 要求验证不仅仅与cookie,还要通过引用和/或请求类型(POST而不是GET)进行验证。
cookie应用场景
  • 记住用户的安全搜索偏好设置
  • 看到的广告与用户更相关,
  • 计算网页访问者数量,帮助用户注册网站服务,
  • 保护用户的数据或记住用户的广告设置

google使用的cookie类型

  1. Preferences(偏好)

    允许网站记住改变网站行为的或者外观的信(字体大小)息例如:

    首选语言、所在地区,它可以用这些信息来推送一些天气预报或者新闻

    NID—偏好设置的cookie,包含一个ID google用其记住用户的偏好信息(每页显示的搜索结果、希望打开的安全搜索过滤器)

  2. Security(安全)

验证用户身份,使用SID和HSID的cookie包含用户的账户ID,最近登陆的时间的数字签名和加密记录,这两个cookie的组合可以允许google阻止很多类型的攻击,例如:试图窃取您在网页上完成的表单内容。

3.processes(进程)

进程cookie有助于使网站工作并提供网站访问者期望的服务,例如浏览网页或访问网站的安全区域。如果没有这些cookie,网站将无法正常运行

例如,我们使用名为“lbcs”的Cookie,这使得Google文档可以在一个浏览器中打开多个文档。阻止此Cookie会阻止Google文档正常运行。

4、ADS(广告)

使用Cookie来使广告对用户更具吸引力,对发布商和广告客户更有价值。

Cookie的一些常见应用是根据与用户相关的内容选择广告; 改进有关广告系列效果的报告,并避免展示用户已经看过的广告。

Google使用NID和SID等Cookie来帮助自定义Google媒体资源上的广告,例如Google搜索。例如,我们使用此类Cookie来记住您最近的搜索,您之前与广告客户的广告或搜索结果的互动以及您对广告客户网站的访问。这有助于我们向您展示Google上的自定义广告。

我们还使用一个或多个Cookie来宣传我们在网络上投放的广告。非Google网站上的主要广告Cookie之一被命名为“IDE”,并存储在域doubleclick.net下的浏览器中。另一个存储在google.com中,称为ANID。我们使用其他Cookie,其名称包括DSID,FLC,AID,TAID和exchange_uid。其他Google媒体资源(如YouTube)也可能会使用这些Cookie向您显示更相关的广告。

有时,广告Cookie可能会在您访问的网站的域中设置。对于我们在网络上投放广告的情况,可以在您访问的网站的域中设置名为“gads”或“gac”的Cookie。与在Google自己的域中设置的Cookie不同,当您使用的网站不在其设置的网站上时,Google无法读取这些Cookie。它们用于衡量与该域上广告的互动以及防止向您展示相同广告的次数。

Google还使用转化Cookie,其主要目的是帮助广告客户确定点击其广告的用户最终购买其产品的次数。这些Cookie允许Google和广告客户确定您点击了该广告,然后访问了该广告客户网站。Google不会将转化Cookie用于个性化广告定位,并且仅在有限时间内保留。名为“转化”的Cookie专门用于此目的。它通常设置在googleadservices.com域或google.com域中(您可以在此页面底部找到我们用于广告Cookie的域列表)。我们的一些其他Cookie也可用于衡量转化事件。例如,DoubleClick和Google Analytics Cookie也可用于此目的。

我们还使用名为“AID”,“DSID”和“TAID”的Cookie,如果您之前已在其他设备上登录了Google帐户,则会将这些Cookie用于在各设备之间关联您的活动。我们这样做是为了协调您在设备上看到的广告并衡量转化事件。这些Cookie可以在域名google.com/ads,google.com/ads/measurement或googleadservices.com上设置。如果您不希望所看到的广告在您的设备上进行协调,则可以使用“ 广告设置”选择停用广告个性化

5、session state(会话状态)

网站通常会收集有关用户如何与网站互动的信息,这可能包括用户最常访问的页面以及用户是否从某些页面获取错误消息。我们使用这些所谓的“会话状态cookie”来帮助我们改进服务,以改善用户的浏览体验。阻止或删除这些cookie不会使网站无法使用。

这些cookie还可用于匿名衡量PPC(每次点击付费)和联盟广告的有效性。

例如,我们使用名为“recent_watched_video_id_list”的Cookie,以便YouTube可以记录特定浏览器最近观看的视频。

6、Analytics(分析)

Google Analytics(分析)是Google的分析工具,可帮助网站和应用所有者了解访问者如何与其媒体资源互动。它可能会使用一组Cookie来收集信息并报告网站使用情况统计信息,而无需亲自识别Google的个人访问者。Google Analytics使用的主要Cookie是“__ga”Cookie。

除了报告网站使用情况统计信息之外,还可以使用Google Analytics以及上述一些广告Cookie来帮助在Google媒体资源(如Google搜索)和整个网络上展示更相关的广告,并衡量与广告的互动情况我们表明。第一方cookie和第三方cookie

session

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。

当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的session机制更安全些,因为它不会任意读取客户存储的信息。

session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

跟踪和隐私

1、存取方式的不同

Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。

Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类

2、隐私策略的不同

Cookie存储在客户端浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险

3、有效期上的不同

关闭了浏览器该Session就会失效,但是cookie 可以设置一个很长的过期时间保证有效期,但是如果设置session 有效期长的话,服务器累计的session 就会很多,导致内存溢出。

4、服务器压力不同

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。

Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择

5、浏览器支持的不同

Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效

客户端浏览器不支持Cookie,需要运用Session以及URL地址重写。需要注意的是一切的用到Session程序的URL都要进行URL地址重写,否则Session会话跟踪还会失效。

6、跨域支持上的不同

Cookie支持跨域名访问,Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

总结一下,cookie的应用比较广泛,但是存在安全性问题,所以前端后端对于客户输入的内容的过滤十分重要。。

解释httpcookie

Cookie与安全

####