标签:des cWeb style blog http ar io color os
摘自 : http://www.williamlong.info/archives/3125.html
关于cookie的安全知识 :http://shaoshuai.me/tech/2014/08/16/cookie-theft-and-session-hijacking.html
Cookie是什么
Cookie在英文中是小甜品的意思,但在计算机语言中,Cookie指 的是当你浏览某网站时,网站存储在你电脑上的一个小文本文件,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。它记录了你的用户ID,密码、浏览过的网页、停留的时间等信息,用于用户身份的辨别。Cookie通常是以 user@domain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。
为什么要Cookie
因为HTTP协议是无状态的,对于一个浏览器发出的请求,服务器无法区分是不是同一个来源,无法知道上一次用户做了什么。所以,需要额外的数据用于维护 会话。 Cookie 正是这样的一段随HTTP请求一起被传递的额外数据,用于维护浏览器和服务器的会话。我们可以想象一个场景,你没有登录京东时在京东上购物,选择了3件商 品放入购物车,在结算时,京东为什么还能知道这三件商品是什么?没错,是Cookie!
Cookie的工作原理
Cookie利用网页代码中的HTTP头信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。例如:当你在浏览器地址栏中键入了Amazon的URL,浏览器会向Amazon发送一个读取网页的请求,并将结果在显示器上显 示。在发送之前,该网页在你的电脑上寻找Amazon网站设置的Cookie文件,如果找到,浏览器会把Cookie文件中的数据连同前面输入的URL一 同发送到Amazon服务器。服务器收到Cookie数据,就会在他的数据库中检索你的ID,你的购物记录、个人喜好等信息,并记录下新的内容,增加到数 据库和Cookie文件中去。如果没有检测到Cookie或者你的Cookie信息与数据库中的信息不符合,则说明你是第一次浏览该网站,服务器的CGI 程序将为你创建新的ID信息,并保存到数据库中。
关于Cookie的一些知识点
1、Cookie是基于浏览器的,因此当电脑上安装多个浏览器时,服务器会生成多个Cookie。虽然是同一个人,但服务器是识别为多个用户。
2、Cookie是基于浏览器的,因此当同一台电脑有多个人使用时,服务器也只会生成一个Cookie。虽然是多个人,但服务器会认为是一个用户。
3、 Cookie是无法跨设备进行设置的。比如我们在单位和家里分别使用两台电脑,即使我们使用同一种同一版本的浏览器,我们还是生成了两个Cookie,服 务器会认为是两个用户。(PS:现在有些浏览器可以同步数据,比如Chrome、Friefox,可以避免这种问题)
摘自:http://www.williamlong.info/archives/3125.html
第一方Cookie和第三方Cookie
大多数的第三方监测工具和网站分析工具都会采用第 三方Cookie。所谓第一方和第三方的说法,是用来确定Cookie的归属的,这个归属是指Cookie中记录的域(domain)。第一方和第三方的 唯一区别只是:Cookie中的域名是否和被访问网站的域一样,是就是第一方,否就是第三方。举个例子:如果你访问网站 www.chinawebanalytics.cn的时候,网站在你的电脑上设置了一个Cookie,里面的记录的域名也是 www.chinawebanalytics.cn,那么这个Cookie就是第一方的,归你访问的网站 www.chinawebanalytics.cn所有。而如果你访问网站www.chinawebanalytics.cn时,在你的计算机中设置的 Cookie的域名是www.abc.com,那么这个Cookie就是第三方Cookie,归www.abc.com所有。
所以,第一方Cookie并不一定需要由某个网站自己的服务器给自己建立,别的网站也能为它建立;而且,第一方Cookie也不一定是能由某个网站自己读取的,它完全可能由第三方读取。
示例场景:
1、广告服务网站 www.c.com, 提供一个广告js脚本 statistics.js,会给客户端设置cookie, 用于识别用户,
2、站点 www.a.com,siteA.html 嵌入对 www.c.com站点的 statistics.js 的引用,并提供 跳转到 www.c.com 网站 cookie显示页面 showcookie.php。
3、站点 www.b.com, siteB.html同2
4、www.c.com showcookie.php 打印标识用户的 cookie。
用户浏览 a 和 b 网站,获得c网站颁发的唯一个一个用户标识cookie, 在他们的页面上点击跳转到c网站的链接, c网站的showcookie页面可以打印 标识用户的 cookie。
作为广告服务商, 不仅仅可以获得访问广告页面的点击量,
利用referer可以区分从哪个网站跳转到目标广告页面(这个跳转过程,一般是请求了广告商的统计链接URL,其中带着广告页面的URL,广告服务上记录下来自的网站,然后跳转到广告页面),
广告服务商可能在好多网站都投放相同广告,同一个用户可能点击了,不同网站的相同广告,利用第三方cookie标识,标识了用户,可以区分出来,这些点击来自同一个用户。
下面给出代码:
网站c的 statistics.php
通过header 接口,设置了第三方cookie
同时其中的js设置cookie的语句,设置后的cookie为 各自网站的域名, 这样看出第一方cookie不一定是第一方代码设置的。据说谷歌的广告策略是,是使用第一方cookie,就是这种js设置的cookie。
<?php header(‘P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"‘); header("Set-Cookie: thirdcookie=1;path=/;"); ?> function setCookie(c_name,value,expiredays) { var exdate=new Date() exdate.setDate(exdate.getDate()+expiredays) document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()+";domain=www.C.com;") } setCookie("firstSubjectCookie", "1")
siteA.html
点击连接,带着从www.c.com获得的第三方cookie,跳转到第三方的cookie打印页面。
<html> <head> <script type="text/javascript" src="http://www.C.com/statistics.php"></script> <style> </style> </head> <body> <h1>hello world! this is site A</h1> <a href="http://www.c.com/showcookie.php">go to www.c.com</a> </body> </html>
siteB.html
<html> <head> <script type="text/javascript" src="http://www.C.com/statistics.php"></script> <style> </style> </head> <body> <h1>hello world! this is site B</h1> <a href="http://www.c.com/showcookie.php">go to www.c.com</a> </body> </html>
showcookie.php
网站c的 显示cookie页面
<html> <head> <style> </style> </head> <body> <h1>hello world! siteC with cookie= <?php echo $_COOKIE[‘thirdcookie‘]; ?></h1> </body> </html>
截图:
showcookie
经常看到,自己在搜索引擎中搜到的关键字,在其他网页的广告区域显示出来,如下图。
或者在购物网站上的搜索商品,在其他网站上广告位置上显示出来。
研究了第三方cookie,才知道其中原因:
1、你在搜索引擎上搜过的关键字,搜索引擎给你记住,并给设置了一个 用户标识cookie,如下图中 BAIDUID
2、当你访问了嵌有百度推广广告的网页时候,此网页会向百度相同域名请求广告资源, 此请求会带着 BAIDUID cookie
百度接受到这个cookie后,知道你是之前搜索过的用户,在后台中找到你搜索过的关键字,生成广告链接,发给嵌入百度广告的网页,网页显示,如下图,cookie中确实有baidu.com第三方的BAIDUID。
标签:des cWeb style blog http ar io color os
原文地址:http://www.cnblogs.com/lightsong/p/4172979.html