热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

关于cookie跨域的一些个人经验实录

最近在工作中小组到一个cookie跨域设置的问题,然后就一些知识点进步了梳理,然后到网上搜索这方面的资料。本来这些都是一些基础知识,但是网上很多资料参差不齐,有的错误的文章来被转了很多次,所以我...
最近在工作中小组到一个COOKIE跨域设置的问题,然后就一些知识点进步了梳理,然后到网上搜索这方面的资料。本来这些都是一些基础知识,但是网上很多资料参差不齐,有的错误的文章来被转了很多次,所以我自己通过测试来整理这些问题。

第一个:COOKIE的setDomain属性到底能不能设置成当前应用程序所在的域之外的域名。比如我当前应用的域名是:www.test1.com,那么我在当前的应用里设置COOKIE的Domain为".test2.com",会有什么效果?浏览器会不会接受服务器返回来的COOKIE?假如浏览器真的接受了服务端返回的COOKIE,那么浏览器下次真的访问www.test2.com时到底会不会把之前的COOKIE给带上?

现在我写了两个web程序,每个web程序都有一个servlet,同时修改host文件,第一个应用的域名是:www.test1.com,第二个域名是:www.test2.com。并且使用火狐狸和IE10来做测试,测试过程如下:

1)首先在www.test1.com的程序中设置COOKIE的domain为“.test2.com”,访问该应用,在这种情况下IE和火狐狸的浏览器都会接受COOKIE,而且其Domain很明确是.test2.com,这里就说明COOKIE是可以写到浏览器里的,而不是很多地方说的被忽略云云。但是如果再次访问的时候,无论是访问www.test1.com或者是www.test2.com都不会把这个COOKIE带过去。这就验证了COOKIEde setDomain这个方法是不能设置当前应用所在域之外的域名的,之前看到很多文章说的结论是在www.test1.com的应用中设置COOKIE的domain为www.test2.com,则访问www.test2.com时就能在test2.com的应用中取到该COOKIE,这完全是不负责任的扯淡,那种情形只适合共同根域名的情况。辩证想一想都不可能,否则我就能操纵百度或者阿里的网站来读取我们自己定义的COOKIE?

2)现在我们设置www.test1.com的域名为自己,那么如果我们在www.test1.com的网页中使用Iframe嵌入www.test2.com的应用,那么会是什么结果?

首先我们访问了www.test1.com,这个时候www.test1.com和www.test2.com的COOKIE都写到浏览器里了,无论是在IE还是在火狐狸里都是如此,那么再次访问www.test1.com的时候,IE和火狐狸这个时候不同的地方就显示出来了。这个时候IE只会把www.test1.com的COOKIE带上,而不会带www.test2.com的COOKIE的(也就是说在www.test2.com的应用里是拿不到COOKIE的),而且这个时候你再次专门访问www.test2.com也不会拿到之前明明已经写入到浏览器里www.test2.com域名下的COOKIE。而如果在火狐狸里,则www.test1.com的应用中会取到www.test1.com的COOKIE,而且无论是iframe内嵌或者直接访问www.test2.com的应用里都会拿到自己域名下的COOKIE。这种情况使用和标签获取COOKIE是一样的道理。这样看来IE10的安全级别更高。

3)如果我们非要www.test1.com中利用iframe内嵌www.test2.com的方式来将test2.com域名下的COOKIE带过去给www.test2.com服务应用,那该怎么办?

这个非常简单,设置www.test2.com的head,比如response.setHeader设置P3P。关于P3P协议网上资料一大堆,大家可以自己看看。这里要注意,我们在www.test1.com使用iframe嵌入www.test2.com的应用,则www.test1.com设置的COOKIE就是通常意义的第一方COOKIE,而www.test2.com的COOKIE就是常说的第三方COOKIE,我们要设置P3P是要在第3方的程序中设置,这个很多资料里也没有说明白。其实就是www.test2.com的服务端和浏览器协商,让浏览器允许其携带上COOKIE给服务端。一旦突破这点,再结合referer首部属性就能获取用户的浏览习惯和喜好,像经常购买书籍、电子产品等。比如:A网站嵌入了B网站的一个页面,并且B网站设置了P3P,那么当用户访问A网站的时候会顺便访问B网站,这个时候B网站就随机生成一个ID,将这个ID写入到COOKIE,并将这个id和referer信息存入自己的数据库。下次,无论是C网站或者其他网站内嵌了B,被用户访问了,也或者是用户又访问A,都会顺便访问B网站并且将referer和id存入数据库,如果用户用的是同一个浏览器并且从来不清理COOKIE,这样COOKIE中记录的id就不变,每次访问就会把B的COOKIE带上,B网站根据COOKIE中的id和多次存入数据库的referer就能知道你都登录了哪些网站。因为referer的链接说明了所有问题。这样就可以做到对这个人的跟踪和分析。就好比我把我的眼线放在100商店,你访问各个商店时,他们就把你的购买什么的情况告诉我,天长日久我就知道你喜欢买什么了,不知道这个例子是否准确。

暂时先写到这里吧,这个问题也是首次稍微深入探索下,后边根据进展再补充吧,如果有错误请读者一定指正不胜感激。总之,这种基础知识是设计框架的基石,必须要搞清楚。否则,寝食难安、芒刺在背。

教程网址:

欢迎收藏∩_∩但请保留本文链接。

推荐阅读
author-avatar
zhaoyan666777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有