`
denger
  • 浏览: 359043 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

淘宝如何跨域获取Cookie分析

阅读更多
Move to: http://www.iteye.com/topic/1000776
分享到:
评论
54 楼 wwkevin811 2012-03-14  
看完后,有两个问题:

1 淘宝这种方式获取回来COOKIE后,在交由服务器端校验,是不是有延时的问题。就是“页面已经展示出来了后”,然后服务器端菜判断用户在线, 再由页面显示出来“这样的问题?

2 如果通过在tmall.com挂一个隐藏的taobao.com, iframe是否可以达到类似的效果呢?
53 楼 fireinwind 2011-08-19  
我用httpclient模拟了一下,现在应该是加上Referer检查了.
如果不加Rederer,就会返回"啊哦,不好意思,该接口不对外部人员开放!";
如果加上"get.addHeader("Referer", "http://www.tmall.com");" (经测试http://www.alimama.com也行)还是可以正确返回的登录信息的.
测试方法是先使用firebug 在浏览器里面把"http://www.taobao.com/go/app/tmall/login-api.php?xxx"这个请求的的内容抓取,然后在代码里在提交get前在head里加上抓取来的Cookie即可.
DT1 写道
我觉得使用Referer解决不了根本的问题,顶多就是防止一些钓鱼网站直接使用JS取信息,
其实可以参考SSO实现,使用JS是取得一个Token,然后再从当前服务在后台跟内部认证服务器认证取得真实的用户名,
这样是不是更可靠些?

JE帐号 写道
JE帐号 写道
mylove4 写道
现在确实不行了。http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154 返回的是:
啊哦,不好意思,该接口不对外部人员开放!



我用httpclient模拟了一下,现在应该是加上Referer检查了.
如果不加Rederer,就会返回"啊哦,不好意思,该接口不对外部人员开放!";
如果加上"get.addHeader("Referer", "http://www.tmall.com");" (经测试http://www.alimama.com也行)还是可以正确返回的登录信息的.
测试方法是先使用firebug 在浏览器里面把"http://www.taobao.com/go/app/tmall/login-api.php?xxx"这个请求的的内容抓取,然后在代码里在提交get前在head里加上抓取来的Cookie即可.



从我测试来看,现在是在服务端对Referer进行检查.假如是类似方式的话,我想进一步问一下,如果有淘宝的同学或者其他有经验的哥们帮忙回答一下:

针对这个过滤Referer的需求,该怎么管理?就像我测试的,除了tmall,alimama也是可以的,那么假如明天淘宝又多个业务入口比如abc,而这个abc完全由另外一个部门维护,那么有什么内部机制可以在abc上线前驱动这段"过滤Referer"的代码进行修改?
我想到的方式:
1.这个过滤原本就是公用的模块,不需要各部门额外维护,增加abc后,在公用模块添加一下即可.但是这个需要非常强大和很细节的前期设计能力.
2.内部存在一个部门负责这种总体的协调,但是这就意味了,这个部门给知道很多分项目的实现细节,并且能在新加入abc的时候立刻意识到还有这样一段"过滤Referer""的代码需要修改.
3.abc先开发,测试出问题,找出问题后,通知其他部门修改这段代码. 在这个问题上,这种方式确实可以奏效,因为这是个一测就会出明显问题的情况.但是是否存在那种很不明显隐藏很深的情况?这对测试用例的覆盖就是硬性的要求了.而且,这也意味了无论设计还是架构都出现了无能为力,无法完全覆盖控制风险的情况.




关于“我用httpclient模拟了一下”,这位大侠,我也想做测试。没成功。
能不能发你的代码 给我。qeekey@126.com
52 楼 denger 2011-05-10  
clue 写道
denger 写道

flex是可以运行在客户端\浏览器的呀,你不知道?你以为我是类似java一样,在本地写一个 main方法通过httpclient去访问自己的cookie?
比如说我有一个网站 www.xx.com ,我在这个网站中偷偷的的将该flash放在网页中,并隐藏。然后我把这个网页发给你,试问,我能不能获取在你的 taobao cookie中的信息呢?
说白了就是只要我能让协造 Refere的程序运行在你的机器上,就能收集到cookie信息,java/applet 都行, 还别说flash了...

flash及applet能随意伪造Referrer并且不会有安全警告或要求授权之类的提示?
那还真没办法了,只能前端传递ticket,服务端再自行读取了。

P.S. 怎么我听说flash的所有请求都是不带Referrer的?导致那些视频站什么的比较难做防盗链。比较小白,求解


我这里说的是 flex噢...
http://www.abdulqabiz.com/blog/archives/2006/03/03/http-authentication-for-httpget-requests-using-actionscript-3/

http://code.google.com/p/as3httpclient/
51 楼 clue 2011-05-10  
denger 写道

flex是可以运行在客户端\浏览器的呀,你不知道?你以为我是类似java一样,在本地写一个 main方法通过httpclient去访问自己的cookie?
比如说我有一个网站 www.xx.com ,我在这个网站中偷偷的的将该flash放在网页中,并隐藏。然后我把这个网页发给你,试问,我能不能获取在你的 taobao cookie中的信息呢?
说白了就是只要我能让协造 Refere的程序运行在你的机器上,就能收集到cookie信息,java/applet 都行, 还别说flash了...

flash及applet能随意伪造Referrer并且不会有安全警告或要求授权之类的提示?
那还真没办法了,只能前端传递ticket,服务端再自行读取了。

P.S. 怎么我听说flash的所有请求都是不带Referrer的?导致那些视频站什么的比较难做防盗链。比较小白,求解
50 楼 denger 2011-05-10  
clue 写道
denger 写道
DT1 写道
我觉得使用Referer解决不了根本的问题,顶多就是防止一些钓鱼网站直接使用JS取信息,
其实可以参考SSO实现,使用JS是取得一个Token,然后再从当前服务在后台跟内部认证服务器认证取得真实的用户名,
这样是不是更可靠些?

是的,我测试了,我通过 flex/HTTPService 同样还是可以 伪造 Refere ,同样可以获取到用户名。

自己能访问到并不是安全隐患,这个消息也并不是针对你自己也敏感的网站内部数据,它只是将你在其域名下的cookie输出而已
但如果你写的flash可以在别人访问时不知道的情况下伪造Referrer,并将它收集起来,那才是有问题。
就像你把你自己的电脑系统的远程端口打开了,人人都能访问它,但这并不代表别人用这个系统也不安全, 你始终只是访问到“你可以访问”的数据而已。

flex是可以运行在客户端\浏览器的呀,你不知道?你以为我是类似java一样,在本地写一个 main方法通过httpclient去访问自己的cookie?
比如说我有一个网站 www.xx.com ,我在这个网站中偷偷的的将该flash放在网页中,并隐藏。然后我把这个网页发给你,试问,我能不能获取在你的 taobao cookie中的信息呢?
说白了就是只要我能让协造 Refere的程序运行在你的机器上,就能收集到cookie信息,java/applet 都行, 还别说flash了...
49 楼 clue 2011-05-10  
denger 写道
DT1 写道
我觉得使用Referer解决不了根本的问题,顶多就是防止一些钓鱼网站直接使用JS取信息,
其实可以参考SSO实现,使用JS是取得一个Token,然后再从当前服务在后台跟内部认证服务器认证取得真实的用户名,
这样是不是更可靠些?

是的,我测试了,我通过 flex/HTTPService 同样还是可以 伪造 Refere ,同样可以获取到用户名。

自己能访问到并不是安全隐患,这个消息也并不是针对你自己也敏感的网站内部数据,它只是将你在其域名下的cookie输出而已
但如果你写的flash可以在别人访问时不知道的情况下伪造Referrer,并将它收集起来,那才是有问题。
就像你把你自己的电脑系统的远程端口打开了,人人都能访问它,但这并不代表别人用这个系统也不安全, 你始终只是访问到“你可以访问”的数据而已。
48 楼 denger 2011-05-09  
DT1 写道
我觉得使用Referer解决不了根本的问题,顶多就是防止一些钓鱼网站直接使用JS取信息,
其实可以参考SSO实现,使用JS是取得一个Token,然后再从当前服务在后台跟内部认证服务器认证取得真实的用户名,
这样是不是更可靠些?

是的,我测试了,我通过 flex/HTTPService 同样还是可以 伪造 Refere ,同样可以获取到用户名。
47 楼 DT1 2011-04-27  
我觉得使用Referer解决不了根本的问题,顶多就是防止一些钓鱼网站直接使用JS取信息,
其实可以参考SSO实现,使用JS是取得一个Token,然后再从当前服务在后台跟内部认证服务器认证取得真实的用户名,
这样是不是更可靠些?

JE帐号 写道
JE帐号 写道
mylove4 写道
现在确实不行了。http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154 返回的是:
啊哦,不好意思,该接口不对外部人员开放!



我用httpclient模拟了一下,现在应该是加上Referer检查了.
如果不加Rederer,就会返回"啊哦,不好意思,该接口不对外部人员开放!";
如果加上"get.addHeader("Referer", "http://www.tmall.com");" (经测试http://www.alimama.com也行)还是可以正确返回的登录信息的.
测试方法是先使用firebug 在浏览器里面把"http://www.taobao.com/go/app/tmall/login-api.php?xxx"这个请求的的内容抓取,然后在代码里在提交get前在head里加上抓取来的Cookie即可.



从我测试来看,现在是在服务端对Referer进行检查.假如是类似方式的话,我想进一步问一下,如果有淘宝的同学或者其他有经验的哥们帮忙回答一下:

针对这个过滤Referer的需求,该怎么管理?就像我测试的,除了tmall,alimama也是可以的,那么假如明天淘宝又多个业务入口比如abc,而这个abc完全由另外一个部门维护,那么有什么内部机制可以在abc上线前驱动这段"过滤Referer"的代码进行修改?
我想到的方式:
1.这个过滤原本就是公用的模块,不需要各部门额外维护,增加abc后,在公用模块添加一下即可.但是这个需要非常强大和很细节的前期设计能力.
2.内部存在一个部门负责这种总体的协调,但是这就意味了,这个部门给知道很多分项目的实现细节,并且能在新加入abc的时候立刻意识到还有这样一段"过滤Referer""的代码需要修改.
3.abc先开发,测试出问题,找出问题后,通知其他部门修改这段代码. 在这个问题上,这种方式确实可以奏效,因为这是个一测就会出明显问题的情况.但是是否存在那种很不明显隐藏很深的情况?这对测试用例的覆盖就是硬性的要求了.而且,这也意味了无论设计还是架构都出现了无能为力,无法完全覆盖控制风险的情况.

46 楼 denger 2011-04-19  
yhx0000 写道
至于跨域名,其实使用SSO就可以实现了.
不需要在前台传递过多的信息.
但是必须要具有一个标识串,这个可以通过多种方式实现.但是串需要无规则或加密.
get和post的方式.
然后session采用一个session集群存储的方式来保存.
后台对应成功后会写入cookie信息.


你说的就是 cas 的大概方案,实现上比你说的更复杂。
45 楼 yhx0000 2011-04-19  
至于跨域名,其实使用SSO就可以实现了.
不需要在前台传递过多的信息.
但是必须要具有一个标识串,这个可以通过多种方式实现.但是串需要无规则或加密.
get和post的方式.
然后session采用一个session集群存储的方式来保存.
后台对应成功后会写入cookie信息.

44 楼 xinyu198736 2011-04-19  
前几天我加上了refer检查,当然refer很容易伪造,木钱也没有什么好的解决方案,希望大家在研究的同时能够提供一些建议.
木钱是通过白名单来控制的,而且这个接口只有通过我这里同意后才能使用,否则更改的时候产生问题概不负责的

谢谢大家对我们方案的关注
43 楼 denger 2011-04-19  
xushaomin1122 写道
其实用cas单点登录就可以做到呀

cas 的单点登录好象跟这里所说的cookie跨域没多大关系吧,cas是基于一个域名下统一存储cookie的,从而去避免了sso 中 cookie跨域的问题。 这一点与淘宝的处理类似,将cookie统一存储在taobao.com域名下,然后提供获取cookie接口。
与之不同的是CAS对于其它子应用系统来说也是不需要与cookie打交道,甚至于不需要知道cookie的存在,而cas 的cookie中也只存储了TGT.  如果cas-client希望能够获取用户名那么必须要通过在统一认证中心验证并由服务器生成 TGT 加入到cookie中,接着cas再根据TGT生成ST以参数的形式传递给子应用系统,这时候子应用系统再通过 ST 调用  serviceValidate 或 smalValidate 从而来获取用户登录名。
42 楼 xushaomin1122 2011-04-19  
其实用cas单点登录就可以做到呀
41 楼 rplees 2011-04-19  
clue 写道
这算不算一个安全隐患呢?任意的站点都可以访问此数据,从而它们都可以取得淘宝的登录信息。

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


我也是这么想的!
40 楼 dragoncy 2011-04-18  
Referer过滤应该是个白名单
39 楼 wushipan_simple 2011-04-18  
学了不少东西
38 楼 JE帐号 2011-04-18  
JE帐号 写道
mylove4 写道
现在确实不行了。http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154 返回的是:
啊哦,不好意思,该接口不对外部人员开放!



我用httpclient模拟了一下,现在应该是加上Referer检查了.
如果不加Rederer,就会返回"啊哦,不好意思,该接口不对外部人员开放!";
如果加上"get.addHeader("Referer", "http://www.tmall.com");" (经测试http://www.alimama.com也行)还是可以正确返回的登录信息的.
测试方法是先使用firebug 在浏览器里面把"http://www.taobao.com/go/app/tmall/login-api.php?xxx"这个请求的的内容抓取,然后在代码里在提交get前在head里加上抓取来的Cookie即可.



从我测试来看,现在是在服务端对Referer进行检查.假如是类似方式的话,我想进一步问一下,如果有淘宝的同学或者其他有经验的哥们帮忙回答一下:

针对这个过滤Referer的需求,该怎么管理?就像我测试的,除了tmall,alimama也是可以的,那么假如明天淘宝又多个业务入口比如abc,而这个abc完全由另外一个部门维护,那么有什么内部机制可以在abc上线前驱动这段"过滤Referer"的代码进行修改?
我想到的方式:
1.这个过滤原本就是公用的模块,不需要各部门额外维护,增加abc后,在公用模块添加一下即可.但是这个需要非常强大和很细节的前期设计能力.
2.内部存在一个部门负责这种总体的协调,但是这就意味了,这个部门给知道很多分项目的实现细节,并且能在新加入abc的时候立刻意识到还有这样一段"过滤Referer""的代码需要修改.
3.abc先开发,测试出问题,找出问题后,通知其他部门修改这段代码. 在这个问题上,这种方式确实可以奏效,因为这是个一测就会出明显问题的情况.但是是否存在那种很不明显隐藏很深的情况?这对测试用例的覆盖就是硬性的要求了.而且,这也意味了无论设计还是架构都出现了无能为力,无法完全覆盖控制风险的情况.
37 楼 JE帐号 2011-04-17  
mylove4 写道
现在确实不行了。http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154 返回的是:
啊哦,不好意思,该接口不对外部人员开放!



我用httpclient模拟了一下,现在应该是加上Referer检查了.
如果不加Rederer,就会返回"啊哦,不好意思,该接口不对外部人员开放!";
如果加上"get.addHeader("Referer", "http://www.tmall.com");" (经测试http://www.alimama.com也行)还是可以正确返回的登录信息的.
测试方法是先使用firebug 在浏览器里面把"http://www.taobao.com/go/app/tmall/login-api.php?xxx"这个请求的的内容抓取,然后在代码里在提交get前在head里加上抓取来的Cookie即可.
36 楼 JE帐号 2011-04-17  
xinyu198736 写道
JE帐号 写道
整个过程就是.
在taobao login,在taobao.com域下存用户标识 cna,在服务端使用该cna与user id关联,然后在 www.tmall.com中请求www.taobao.com的一个js,此时cookie就会把 cna标识带上,然后服务端根据cna定位用户,在作为js内容返回.

基本流程应该就是这样了吧?

另外,LS貌似有淘宝的朋友,请问为什么不用p3p来解决这种问题?是出于什么考虑?还有关于安全问题,除了检查 Referer 还有别的方法不?

P3P用来解决跨域设置cookie,但是所谓的跨域并不是在a域下设置b的cookie,而是
所谓的cookie跨域,并不是taobao.com试图去设置tmall.com的cookie,而是taobao.com试图去设置taobao.com的cookie,但是这个过程是在一个tmall.com的域里进行的.
刚写了篇文章说这个事情:http://www.html-js.com/?p=1227



明白了,总结一下.

为了减少歧义,首先给出定义,"跨域设置cookie","设置第三方cookie"
1."跨域设置cookie"是指a域下a.html企图设置一个domain为b域的cookie.
2."设置第三方cookie"是指在b域的b.html中一个指向a域的a资源(img,js,css等等)企图创建domain为a域的cookie.
(a域与b域是没有相关性的)

其中1是不允许直接设置的.而2为了兼容IE,需要使用P3P技术.

所以P3P所解决的是第三方cookie设置问题.而这帖子讨论是,跨域共享cookie值,间接的解决第1个问题.

35 楼 mylove4 2011-04-17  
现在确实不行了。http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154 返回的是:
啊哦,不好意思,该接口不对外部人员开放!

相关推荐

    axios中cookie跨域及相关配置示例详解

    本文将详细讲解如何在Axios中配置Cookie跨域以及相关的后端设置。 首先,我们要明确一点:默认情况下,Axios在发起跨域请求时并不会携带Cookie。这是因为浏览器的安全策略限制,为了防止跨站脚本攻击(Cross-Site ...

    跨域获取cookie,多个网站实现一键登录.docx

    总结来说,跨域获取Cookie是通过JSONP机制实现的,主要涉及A网站提供接口读取Cookie,B网站通过Ajax请求获取并设置Cookie。这种方法简化了用户在多个关联网站之间的登录流程,但同时也需要考虑安全问题,避免用户...

    跨域访问解决方案,关于跨域访问cookie的资料

    ### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...

    跨域获取cookie,多个网站实现一键登录.pdf

    跨域获取Cookie是互联网应用中实现单点登录(Single Sign-On, SSO)的一种常见技术,尤其在多网站协作或拥有多个子域名的大型系统中。这里的例子展示了如何通过JavaScript和PHP实现在A网站登录后,B网站能够自动识别...

    Dubbox跨域请求、Cookie设置

    【标题】"Dubbox跨域请求、Cookie设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置...通过分析这些文件,你可以更深入地理解如何在实际项目中配置和测试Dubbox的跨域请求及Cookie设置。

    跨域携带cookie案例.rar

    本文将深入探讨“跨域携带cookie”的案例,重点解析如何通过nginx服务器解决这一问题。首先,我们需要理解什么是跨域以及为什么会有跨域限制。 跨域是指浏览器的同源策略,即JavaScript只能访问与当前页面同协议、...

    SSO跨域读写cookie

    单机模拟多台主机,跨域写cookie场景

    跨域获取cookie方法-附件资源

    跨域获取cookie方法-附件资源

    ajax跨域传递cookie.zip

    ajax跨域传递cookie.zip

    C#基于WebBrowser获取cookie的实现方法

    在C#编程中,WebBrowser控件是一个强大的工具,它允许开发者在Windows应用程序中...通过这种方式,开发者可以轻松地在C#应用程序中实现对WebBrowser控件加载页面的cookie的读取和管理,从而支持更复杂的网页交互需求。

    用script跳转方式主动跨域获取cookie或session(并非网上铺天盖地的主动设置法)

    在A域中存放openid.aspx 在B域中调用A域的openid.aspx 调用方法: ...B域根据这个标识来确定是否更新自己域的cookie,每次更新后都需刷新页面一次,这个刷新动作已经在openid.aspx中完成,不用自己再写。

    如何使用localstorage代替cookie实现跨域共享数据问题

    因为cookie在跨域的情况下,浏览器根本不允许互相访问的限制,为了突破这个限制,所以有了以下这个实现方案,使用postmessage和localstorage进行数据跨域共享。 原理比较简单,但是遇到的坑也不少,这里梳理一下,做...

    asp.net(C#)跨域及跨域写Cookie问题

    标题中提到的“***(C#)跨域及跨域写Cookie问题”,实际上涉及到了Web开发中的一个常见问题:不同域名下的Web页面互相访问时遇到的同源策略限制。同源策略是浏览器的一种安全机制,它规定了不同域之间的交互行为,...

    关于Iframe如何跨域访问Cookie和Session的解决方法

    这样,当Iframe加载admin.php时,浏览器会接受P3P头,允许在不同域之间设置和读取Cookie,从而实现跨域登录。 至于Session,虽然它看起来与Cookie不同,但它们在很多情况下密切相关。Session通常依赖于Cookie来存储...

    Ajax跨域请求COOKIE无法带上的完美解决办法

    在互联网应用中,当用户需要从一个域名(域A)的Web页面发起一个Ajax请求到另一个不同域(域B)的服务器时,就会发生跨域请求。出于安全考虑,浏览器同源策略默认禁止这种跨域Ajax请求携带cookies,这种限制会阻止一...

    基于axios 解决跨域cookie丢失的问题

    然而,有些情况下我们需要在跨域请求中保持登录状态,这就涉及到如何处理跨域cookie的问题。在本篇文章中,我们将深入探讨如何基于axios库来解决这个问题。 axios是一个非常流行的JavaScript库,用于发起HTTP请求。...

    jQuery使用ajax跨域获取数据

    jQuery使用ajax跨域获取数据

Global site tag (gtag.js) - Google Analytics