一、沙箱和安全策略问题
1、此问题发生在连接时,准确地说是连接前,分别两种情况:
1.本地播放
本地播放时,默认情况下Flash Player将不允许swf访问任何网络。
访问http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html,将swf加入到许可列表,即可解除限制。
2.WEB发布
发布在WEB上的swf, 将可能面临跨域的问题。
2、Flash中的通信方式有两种:
1.HTTP方式:如URLLoader等用于加载远程swf、文件、图像、音视频流。
2.Socket主要:如 XMLSocket,用于与远程服务端建立长效连接。
Flash Player6以上版本引入了安全策略文件,在进行正式的通信前,会检查目标位置是否存在合法的安全策略,以防止不同域内的应用无限制任意互访。
HTTP方式下,Flash Player会检查目标域根目录下是否存在crossdomain.xml,如果有,则获取并分析其内容(内容后述)以确定是否允许继续访问。
Socket方式下,Flash Player获取安全策略稍微复杂些,从9.0.115.0版起,标准步骤如下(以下描述以IE为标准,例外情况后述):
1)首先向目标主机 843 端口发起连接,并发送一个字符串,内容为"<policy-file-request/>",并等待返回安全策略文件并分析。
2)若1)失败,则检查AS代码中是否使用了Security.loadPolicyFile("xmlsocket://主机:端口")方法加载安全策略文件,若有,则获取并分析。
3)若2)失败,则向AS代码中即将连接的 "目标主机:端口" 发起请求,过程同1)。
4)若成功获得安全策略文件并经分析认为允许建立连接,则继续执行Connect()方法,此时方真正尝试创建与目标主机的连接。
3、解决方案
HTTP 连接方式不用再说,只说说 Socket 方式。
1) 在服务端写一个程序,监听843端口,当收到 "<policy-file-request/>" 时将恰当的策略内容(crossdomain.xml)发送回客户端。
2) 在AS中通过loadPolicyFile()加载策略文件,此处需注意使用xmlsocket://,而不是 http://。
3) 在标准服务端口中,检测到"<policy-file-request/>"时,返回策略内容。
4、例外情况及测试结果
经测试发现,在IE,Opera中,Flash Player会严格按上述步骤检查安全策略。
在 FireFox, Chrome中发起连接时,Flash Player并不会向服务端发送"<policy-file-request/>",而是直接连接成功。这应该是Flash Player不同实现版本的原因。
5、数据传输中的问题
在XMLSocket数据传输中,需要注意以下细节,否则会出来些莫名其妙的问题。
1.结束符号
XMLSocket接收到服务端下发的数据时,将连续放于接收缓冲区,直到接收到"\0"字节(字节内容为ASCII值0),才认为接收完成,并调用相应的onData或onXML事件。
服务端若用Java编写,并使用标准的String类族,则在发送数据结尾应手动加上"\0"。
若用 C++ 编写,由于C++中标准字符串类型便是以字节0作结束标记,故不必再加"\0"。
* C++中需注意另一个问题,若自行进行了字符串处理,在决定字符串长度时,标准的strlen及String.Length()等返回的均是实际有效字符个数,最终向网络发送时,总长度应加1字节,以容纳结尾的字节0。
* 此问题在发送安全策略内容时同样存在,故需重视。
2.中文问题
默认情况下,不管从哪一端发向另一端的数据,若包含了中文字符,都会产生乱码的现象,解决方法有二:
1).在AS中加入"System.useCodepage=true;" 强制使用本地代码集,此法最方便,但是在跨语种平台上仍会出现乱码。
2).在代码中自行编写转码函数,此法复杂些,但通用性强。具体转码算法网上很多,主要是C++服务端需要,Java中使用JDK类转换为UTF-8即可。
相关推荐
本程序为绿色mini服务程序 程序会自动打开Flash默认的843端 自动将crossdomain.xml返回给flash客户端 您可以修改crossdomain.xml中的内容,大小不要超过10K 有问题可email我
本程序为绿色mini服务程序 程序会自动打开Flash默认的843端口 自动将crossdomain.xml返回给flash客户端 您可以修改crossdomain.xml中的内容,大小不要超过10K
总的来说,AS与Java Socket通信涉及到跨域安全策略的配置、Socket对象的创建和管理、数据的编码与解码以及异常处理等多个方面。通过理解这些概念和技术,你可以构建起安全、高效的跨平台网络应用。提供的压缩包文件...
本文将深入探讨如何实现这两种语言间的Socket通信,并解决在Flash Player的安全沙箱问题。 首先,让我们理解什么是Socket通信。Socket是网络编程中的一个概念,它允许两个程序通过TCP/IP协议进行双向通信。在Java中...
在Adobe Flash Player升级到9.0.124后,由于安全策略更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的手段不能继续使用。更改如下: 1,首先检测目标服务器的843端口是否提供安全策略 2,如果1没有检测...
Socket沙箱设置主要涉及到Flash Player的安全策略,尤其是自9.0.115.0版本之后,对于跨域Socket通信的限制更为严格。这个安全策略的目的是为了防止恶意的跨域数据访问,保护用户信息安全。以下是对这个知识点的详细...
说明.txt文件通常会包含有关如何部署和配置这些组件的详细步骤,包括如何启动CLSocKetServer,如何配置`conf.ini`,以及如何处理`socket-policy.xml`以适应不同的安全策略。 总的来说,这个组件的目的是为了解决AS3...
《Flex与.NET基于Socket的网络连接 收藏 .txt》和《Flex flash_player9 沙箱安全解决方案.txt》可能讨论了Flex应用程序与.NET服务通过Socket通信时如何处理安全沙箱问题,以及在Flash Player 9中如何解决这些问题的...
总的来说,C#与Flash之间的Socket通信涉及网络编程、安全策略和多线程等复杂技术。开发者需要理解并正确使用这些技术,以构建高效、安全的跨平台实时应用。在实现过程中,注意调试和异常处理,确保应用在各种情况下...
总结来说,Xcode与Flash通过Socket通信需要理解网络编程的基本原理,掌握如何在两端建立和管理Socket连接,同时要注意Flash的跨域安全策略。通过正确的配置和代码实现,可以实现流畅的数据交换,无论是在本地还是...
Flex安全沙箱问题是一个在开发基于...总的来说,解决Flex安全沙箱问题需要深入理解沙箱机制、跨域策略和`crossdomain.xml`文件的配置,同时关注服务器端的实现细节,以确保应用程序既能正常运行,又能保障用户的安全。
在安全沙箱规则下,Flash 有严格的域和端口访问限制,例如同域策略、禁止访问本地服务器和未认证的跨域请求等。 为了解决这些问题,我们可以使用跨域策略文件。通过调用 `Security.loadPolicyFile()` 加载策略文件...
在Flash中,为了保护用户的隐私和安全,Flash Player实施了一系列的安全沙箱规则。以下是其中几个关键规则: 1. **同源策略**:`.swf`文件和目标主机必须位于同一域名下才能成功建立连接。 2. **本地资源限制**:从...
flash使用socket安全沙箱问题,需要建立安全策略服务器,java完成的一个jar,建立安全策略服务器,需要servlet-api.jar
- `port`: 表示服务器监听的端口号,通常不低于1024,除非服务器配置了特定的安全策略文件允许较低端口号。 #### 四、示例代码分析 下面分别给出使用Socket和XMLSocket建立连接的示例代码: ##### 1. Socket连接...
- 对于Flash Player 8及以上版本,存在安全限制,如本地文件系统和网络沙箱之间的数据加载。 - URLStream 提供了更底层的访问方式,数据一下载即可使用,不需要等待整个文件下载完毕。 - URLStream 中的读取操作...
为了确保安全性,Flex采用了一套完整的安全机制来控制不同域之间的通信,其中包括了沙箱机制和安全策略文件的应用。 #### 二、沙箱机制 Flex的安全机制之一就是沙箱机制,它限制了SWF文件能够访问的资源范围,以...
- 由于Flash的安全沙箱机制,跨域通信需要设置正确的策略文件,确保Flash内容可以与指定的Java服务器通信。 - 对于Java Applet,必须正确配置签名证书,以便浏览器允许其执行,并能访问本地资源。 4. **应用实例*...
8. **安全机制**:为了保护用户和内容提供商,Flash Player有一套安全机制,包括沙箱模型、跨域策略文件等,源码可能涉及这部分内容。 学习这份源码,不仅可以帮助我们理解Flash播放器的工作原理,还能为开发类似...