JavaScript(XMLHttpRequest)跨域访问解决办法及安全性问题(附java写的proxy代码)
来源:互联网 发布:世界上第一位程序员是 编辑:程序博客网 时间:2024/06/06 09:00
本来写了好久...然后CSDN发布文章后内容都没了...切忌要保存内容吧,这里不会自动保存草稿。我抓狂了,简短描述了,唉。
具体JavaScript安全机制请查看《JavaScript.The.Definitive.Guide.5th.Edition》。因为网上解决跨域问题的文章不少,但都笼统的说了一下“因为JavaScript的安全框架”直接就跳过原因了,本着寻根问底的心态钻研了下。之前把自己的话描述了一次,但发布时文章没了,当然也只能怪自己了><
关于JavaScript的安全性请记住一下几点,注意不同浏览器也有不同限制:
- JavaScript不能增删改查用户客户端的任何数据。
- 无法打开socket或者接受其他主机请求。
- 新建窗口事件只有在用户鼠标点击事件才能触发。
- 鼠标移动到连接地址时,状态栏要显示确切地址。
- 无法打开边距小于100像素的窗口。
- fileupload属性value值无法设置。
- 同源策略(The Same-Origin Policy)注意对于cookie也同样适用。
安全性的详细描述和解析就不再写了...请原谅.
关于JavaScript跨站访问(Cross-Site)
跨域访问的问题在于第7点,首先理解脚本本身的来源与同源策略不相关。即B域调用A域的脚本(通过script的src),可以完全的访问B域的文档内容。但如果访问A域或者C域的话同源策略就发挥作用。
同源指的是:同协议,同域名并且同端口。缺一不可。
某些情况下,同源策略会显得太严谨了。但在安全性的前提下,我们还是可以有解决办法的。这些解决办法跟安全性框架没任何冲突,除非它是浏览器的一个漏洞。
1、主域相同,子域之间的访问。
使用document的domain属性,默认情况下存放装载文档的服务器主机名。
例如,现在两个域,home.example.com和developer.example.com。
这两个域之间想互相装载文档属性的话是完全符合需求的,可以把document.domain属性设置为"example.com"。另注意domain的值至少要有一个点号。
此时文档就有同源性可以互相访问了。
2、主域不相同。
目前有两种解决办法,但是归根到底还是通过proxy实现。
proxy的作用:
proxy位于文档本域,作用是用来访问远程的资源并且返回给JavaScript。
一、使用AJAX XMLHttpRequest.
使用JavaScript构造XMLHttpRequest请求然后通过proxy获取资源。
二、使用script标签.
通过使用script标签设置src为proxy获取资源,注意返回的资源格式严谨性。必须为类似JSON等数据格式。
另,还有一些是关于iframe的解决办法和情况没考虑,但暂时没遇到,先不考虑了。以上的为使用中常碰到的问题。
附上java写的Proxy代码(jsp)
- JavaScript(XMLHttpRequest)跨域访问解决办法及安全性问题(附java写的proxy代码)
- JavaScript(XMLHttpRequest)跨域访问解决办法及安全性问题
- applet跨域访问的安全性问题
- 关于JavaScript的跨域问题XMLHttpRequest cannot load
- jQuery 跨域访问教程 XMLHttpRequest cannot load 解决办法
- Silverlight跨域访问安全性问题
- XMLHttpRequest 跨域访问
- java代码的安全性
- java代码的安全性
- 关于AJAX/javascript 跨域访问的解决办法及 CORS(Cross-Origin Resource Sharing) 简单介绍
- 关于AJAX/javascript 跨域访问的解决办法及 CORS(Cross-Origin Resource Shar
- Java线程及安全性问题
- 基于51单片机的计算器写代码遇到的问题及解决办法
- Java代码安全性的解析
- XMLHttpRequest 跨域问题
- 代码访问安全性使用
- 代码访问安全性
- dbn_svr代码遇到的问题及解决办法
- 使用MD5和SHA1算法对数据进行加密
- 开通csdn,开始我的开发历程
- GridView 72般绝技
- 编程中,突然想起 “云计算”...
- 号召
- JavaScript(XMLHttpRequest)跨域访问解决办法及安全性问题(附java写的proxy代码)
- 北京十大情人分手圣地
- 岩土人的生活
- HP非常经典系统管理文章
- MVC
- break return continue语句的用法
- 关系型数据库与实时型数据库
- Eclipse 安装插件
- 熊猫烧香核心代码