2
zythum 2013-02-07 10:06:37 +08:00 1
先说jsonp不能post 所以基本只能做读接口。不能做写接口。
这种需要登陆的场景基本应该都是做iframe嵌入比较靠谱一些。 对于第三方保存你的密码的还是请慎重。 他的host是他自己域名的字符串。用来继续调它站点的js和css的。不用在意。 前端是没法拦截注入js的。这个很遗憾。 |
4
zythum 2013-02-07 10:32:10 +08:00
@friskfly 还是没办法。所以说ajax不允许跨域请求就是这个一个关系。浏览器来保证安全性。
所以就那么几种跨域通信。 ifrome提交,jsonp请求。 jsonp请求的好处是可以callback。ifrome做callback其实也是可以的,只是需要双方都需要约定。html5有个叫做postmassage什么的对吧。 |
5
est 2013-02-07 10:39:33 +08:00
有人和我一样把 美味书签 当成 del.icio.us 的么。。。
|
6
friskfly OP @zythum 汗,怎么感觉你回答的和我问的不是同一个问题。
我的意思是我在 http://val.markovic.io/blog/youcompleteme-a-fast-as-you-type-fuzzy-search-code-completion-engine-for-vim 上点击书签栏上的美味书签js,为什么请求的js,确是在当前域名下的呢?中间有个代理的过程,http://val.markovic.io/cdn-cgi/pe/bag?r[]=http%3A%2F%2Fmeiweisq.com%2Fstatic%2Fjs%2Fsave_v3.js%3F0.6207124525681138 似乎用cloudflare 做 cdn 的网站都会这样。 @est 美味书签就是 del.icio.us 的中文版。 |
7
Frannk 2013-02-08 12:02:07 +08:00
额 技术细节没想明白
猜测是cloudflare脚本的安全策略 不允许脚本随意注入 而是上报脚本并通过白名单 防止产生安全隐患 没想到cloudflare做了这么多 |
8
keakon 2013-02-08 13:43:09 +08:00 1
CloudFlare 有个 Rocket Loader 功能,可以异步加载 JS。估计是 CloudFlare 自己帮你获取 JS,然后返回给你。这玩意好像每 25ms 执行一次,就把美味书签生成的 script 给替换掉了。
https://support.cloudflare.com/entries/22063463-what-does-rocket-loadertm-do |
9
zhangxiao 2013-02-08 15:22:10 +08:00
我对jsonp的理解比较简单... ajax默认不能跨域,但是这种通过收藏栏执行的js,其实可以在你的当前页面dom里引用一个js,也就是加上一个<script>标签。那么自然浏览器会给这个js文件所在的服务器发请求。这个请求可能是指向一个真的js,或者是其它任何东西。这个请求还可以跟随任何参数(包括你在当前域的cookie)。服务器得到这个请求,可以根据参数以及其他所有的变量,组织所返回的js,被返回的js又可以被页面执行,其实就充当了很大一部分ajax的角色。
|
10
zhangxiao 2013-02-08 15:24:07 +08:00
上面关于cookie的需要澄清一下,这个地方我说的cookie能被发送,不是通过浏览器的行为,因为一般这个js所在的域和你当前的域是不同的,所以浏览器是不会发送当前域的cookie的。但是通过收藏栏执行的js本身可以读取当前域的cookie,然后放在url里作为参数发送。
|
11
zhangxiao 2013-02-08 15:28:45 +08:00
刚才又看了下你文中提到的那个网站。貌似这个网站的js拦截了所有对资源的引用(包括js文件),将请求转发到它的cdn解析去了,应该是为了从cdn下发资源文件吧。所以你的信息理论上是安全的,因为他们应该不会去分析利用。。。
|
12
friskfly OP |
13
friskfly OP @keakon 你是说浏览器还没来得及请求,链接就被替换掉了?这方法实现的好暴力,好有才。有空测试下是不是这样的。 谢谢了,春节愉快。
|
14
zhangxiao 2013-02-09 03:42:58 +08:00 1
|