Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1868|回复: 0

*淘宝如何跨域获取Cookie分析 ◎

[复制链接]

该用户从未签到

发表于 2011-10-31 14:22:41 | 显示全部楼层 |阅读模式
       最近在發xian使用Taobao的时候的一个xiao细jie,于是便萌发起了写这篇文章。
      dang我men在 www.taobao.com 中jin行登录之后,然hou直接切換到 www.tmall.com 域ming下,发现www.tmall.comshou页的最顶部马上顯示成了”您好, andyfaces“,于是便对此处的实现机制進行fen析。
      首先,用户名应该是Cun储在cookie中的,于是在taobao.com的域名中用 firefox看Dao用户名确实是存储在 cookie, 而tmall.com中没有存储該cookie:


      可以确定的shidui于cookie来说肯定shi不允许垮域访问的。无论是tong过JS还是Serverduan程序来说都shi如ci,那么tmall.com是如何访問到taobao.comxia的cookie的呢?

      于是打开 tmall.com,然后使用firebuglaijin行调試,发xian了一條这样的请求语句,
      

      其頁面DeJS代碼为:
Js代码
<script>   
        KISSY.getScript("http://www.taobao.com/go/app/tmall/login-api.php?"+Math.random())   
        </script>  

<script>
        KISSY.getScript("http://www.taobao.com/go/app/tmall/login-api.php?"+Math.random())
        </script>


     看到这里zhi后于是也大gai知dao他如何处理le的,为le確认一xia,于shi搜索一下 KISSY.getScript 函数dai码,確實采用了JS跨域的 JSONP 解决方案:
     Js代码
getScript: function(url, success, charset) {   
            var isCSS = RE_CSS.test(url),   
                node = doc.createElement(isCSS ? 'link' : 'script'),   
                config = success, error, timeout, timer;   
  
                node.src = url;   
                node.async = true;   
  
            scriptOnload(node, function() {   
                    if (timer) {   
                        timer.cancel();   
                        timer = undef;   
                    }   
  
                    S.isFunction(success) && success.call(node);   
  
                    // remove script   
                    if (head && node.parentNode) {   
                        head.removeChild(node);   
                    }   
                });   
            head.insertBefore(node, head.firstChild);   
      }  

getScript: function(url, success, charset) {
            var isCSS = RE_CSS.test(url),
                node = doc.createElement(isCSS ? 'link' : 'script'),
                config = success, error, timeout, timer;

                node.src = url;
                node.async = true;

            scriptOnload(node, function() {
                    if (timer) {
                        timer.cancel();
                        timer = undef;
                    }

                    S.isFunction(success) && success.call(node);

                    // remove script
                    if (head && node.parentNode) {
                        head.removeChild(node);
                    }
                });
            head.insertBefore(node, head.firstChild);
      }
    其原理是通過动态create js include 动态加载js,ranhou為该script节dianbind onload事件或判断onreadystatechange,qi具体细节可以参kao以上 scriptOnload De函数的处理。 dangjs加zaiwan成之后 采yong回diao方式来执行 success 函数。

    为了进一步确实,于是使用 Jquery的 $.getScript 来测試一把,首先zai taobao.com下进行登录成gong,ran后随便zaiben地写了一个測试页,通过以xia語句:
Js代码
$.getScript('http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154', function(){   
    console.log("the taobao.com cookie object:" + userCookie + " username:" + userCookie._nk_);   
});  

$.getScript('http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154', function(){
    console.log("the taobao.com cookie object:" + userCookie + " username:" + userCookie._nk_);
});
    Firbug结果:
     

   其实大zhi原理如此,通过在www.taobao.com 的server端提供一ge获取当qian域下所有cookieDe php的请求地址,然后该php獲qu到cookiezhi后将期并成 js 代码,ye就是以上第二个截图所看到的。然后再在 tmall 采用 jsonp De方式跨域加载该 js 代码,从而实现 cookie 的跨域訪问。
      

大小: 51.1 KB

大xiao: 28.8 KB

大小: 28.5 KB
cha看圖片附件
欢迎来DaoJava学习者论坛,转載请注明地址:http://www.javaxxz.com.
回复

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:22:57 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

嗯,学习到很到很多东西啊
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:23:10 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

这算不算一个安全隐患呢?任意的站点都可以访问此數据,从而它們都可以取得淘宝的登錄信息。

----
风險无处不在,不差這点。
真出事了,还有運营的兄弟们顶着。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:23:17 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

这算不算一個安全隐患呢?任意的站點都可以访問此数据,从而它们都可以取得淘宝的登录信息。

所以一般經常说 cookie 中不建议存储用户的重要隱私等信息,这里的话应该还算好,主要就是昵稱(_nk_ = nickname)。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:23:34 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

这算不算一个安全隐患呢?任意的站點都可以访问此数據,从而它们都可以取得淘宝的登录信息。

所以一般经常说 cookie 中不建议存储用户的重要隱私等信息,这里的話应该还算好,主要就是昵称(_nk_ = nickname)。

昵称也是登錄帐号吧?(淘宝好像只有帐号名?)
这个其實也挺敏感的,如果某网站还带有注册功能,没准你用的密码和淘宝的一样,so...

虽然淘宝的支付需要数字证书,光有密码不顶用,但还是以防万一嘛


有时不光要考虑帐号安全,还要考虑信息安全。
比如我想知道论坛上某人的淘宝帐号,就發消息引诱他去访问我给他订制的网站;如果他还是卖家,还可以拍個物品得到真实姓名、聯系方式等

傳说中的人肉么?汗一个……
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:23:41 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

这算不算一个安全隐患呢?任意的站点都可以訪問此数据,从而它们都可以取得淘宝的登录信息。

所以一般经常说 cookie 中不建议存儲用戶的重要隐私等信息,这里的话应该还算好,主要就是昵称(_nk_ = nickname)。

昵称也是登录帐号吧?(淘寶好像只有帐号名?)
这个其实也挺敏感的,如果某網站还带有注册功能,没準你用的密码和淘宝的一樣,so...

虽然淘宝的支付需要数字证书,光有密码不顶用,但还是以防萬一嘛


有時不光要考虑帳号安全,还要考虑信息安全。
比如我想知道论坛上某人的淘宝帐号,就发消息引诱他去访问我给他訂制的网站;如果他还是卖家,还可以拍个物品得到真实姓名、联系方式等

传说中的人肉么?汗一个……

嗯,你說的确实有道理,正如楼上兄弟所说 ~ 風险无处不在  
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:23:48 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

至少,它应该做下限制,只有Referer为自己分站时才返回数據

另外 Referer 也可以很容易伪造的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:23:56 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

記得以前淘寶内部員工写了一个篇文章,提到使用cookie解决session集中存储的问题。過段时间文章中这段话被删除了。:) 你可以窥探一下、
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-31 14:24:06 | 显示全部楼层

Re:*淘宝如何跨域获取Cookie分析

至少,它应该做下限制,只有Referer为自己分站时才返回数據

另外 Referer 也可以很容易伪造的。


那些“被收集”的浏览器可不会伪造,你伪造也只能收集你自己的cookie而已
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-18 16:48 , Processed in 0.414362 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表