日期:2014-05-16  浏览次数:20366 次

大家来看看:跨域讨论
首先说一下个人理解的跨域:
1)跨域限制只在客户端,服务器端是不存在的;
2)表单不存在跨域限制,而JS提交参数存在跨域限制,这也是目前很多网站的登录不用表单提交的一个重要原因。试想一下,如果CSDN登录页面被人植入了JS,它将用户提交的用户名跟密码通过跨域提交到植入者的网站,那...
3)script src,img src iframe src不存在跨域拦截,所以正常跨域需求可以用iframe解决。
重点是第二个,大家说说自己的想法?


------解决方案--------------------
1:服务器端的跨域请求,难道你不做过滤也照常执行?
2:不用表单做登录,服务器端照样必须有一个数据处理,这又回到了1了
3:script,img,iframe都照样有的,script,img一个简单的来源请求判断即可将你拒之门外。至于iframe
一条简单的if (top.location != self.location)top.location=self.location照样可以令其失效

所以,如果你是指拥有者是同一个人的话,当然可以放宽,但请求的要是都是其他拥有者的数据,这个,基本上跨域就无处不在了,看你怎么理解了。重点当然还是基于安全性
------解决方案--------------------
提交数据来说,js大概有3个方法
1)ajax,这个不允许跨域
2)window.open页面,这个不存在跨域问题,只存在拦截
3)js控制能和服务器通信的html标签跨域提交数据

上面2,3中方法只有被植入js代码才能实现,CSDN没蠢到被植入js代码吧,哈哈。。。。归结来说就是看程序是否健壮了,和跨域没什么关系

然后就是不同域下的窗体对象【window.open的窗体,iframe,frameset等的窗体】,js无法相互操作对方
------解决方案--------------------
试过静态html页面向自己的服务器发ajax请求(有传递地址栏参数,有传递params参数),没有问题
试过向百度之类网站发ajax请求(没有传递参数),没有问题

------解决方案--------------------
我前面一再说的过滤,就是因为像未知数说的这样,大可以在本地做一个静态页,组装一个与对方参数相关的表单,然后该发送去哪里就发送去哪里。这种处理,没有任何浏览器说会认为它是跨域

所以,我一向的观点就是,把别人想得比我聪明,使得我要一再的谨慎处理所有的请求。而非是把别人想简单,自以为别人想不到。反正,互联网么,危机无处不在的呀

至于前面说讲的被植入JS,这基于上属于服务器安全问题了,这要再往下延伸,话题就太大了。。。。。