2010年8月1号 ---actionscript socket连接至策略文件
之前对socket连接中的策略文件还有一些没有解决的问题,而且火狐、google chrome浏览器并不支持,今天对这些做了修改处理,之前的问题应该是策略文件写的还有问题,这次把ip地址和端口重新写了一下,ok了,而且之前放到tomcat中以后,所做的就是访问localhost造成并没有看到结果,没有加载成功,上午突然试了一下,用同时的电脑用自己的ip访问,问题解决了,原来一直以来问题可能很早就解决了,但是没有一直使用以前的策略文件和localhost所以没有看到程序运行成功。另外还有几个不错的这方面的网站,推荐:
http://hi.baidu.com/wurongle_1987/blog/item/9130228adf9909739e2fb4ea.html
文章一:http://blog.csdn.net/eyking/archive/2009/10/21/4702330.aspx
文章二:http://blog.csdn.net/aizyhan/archive/2009/02/04/3862680.aspx
文章三:http://blog.csdn.net/jiabangok/archive/2009/04/16/4075210.aspx
这篇文章对沙箱安全,本地flash socket连接等内容做了介绍;
以下是全部内容:
文章一:http://blog.csdn.net/eyking/archive/2009/10/21/4702330.aspx
Flex就是致力于RIA的应用,Adobe为了扩大战场,推出了AIR环境,那么此时采用Flex编写的程序在浏览器中与桌面环境下都可以很好的移植了。像Flex与Flash这样奇怪的东西,战场不仅仅在浏览器上,还跑到了桌面环境下。一个很重要的安全模型就被提出了:Flash的安全沙箱。要是没这样的安全策略,恐怕这个世界就不安宁了,当然初期,这个世界本身就不安宁(我接触Flash时,那时还是5.0、6.0版本的,那是04年,我刚上大学的时候……)。这样的策略是这些年逐渐完善的。
其实说Flash的安全沙箱就包含进Flex了,因为本质都是Flash,都是运行在Flash Player这个容器中的,Flex仅仅是将程序员与设计人员分离了而已。
进入本次的主题- -。。
因为是笔记,所以不会详细,而且这些笔记来自我看的书籍与资料(这似乎是废话)。
安全沙箱包括:远程沙箱与本地沙箱。其实这个沙箱模型类似与浏览器中的同源策略。在同一域内的资源会被放到一个安全组下,这个安全组就被称为安全沙箱了。
在深入了解沙箱之前先得明确Flash Player的权限控制(我还是按照Flash CS3上的中文官方文档的名词来划分吧):
1、管理用户控制:
这指系统的最高权限用户,win下的Administrator,linux下的root等。有两种类型的控制:
a)、mms.cfg文件:数据加载、隐私控制、Flash Player更新、旧版文件支持、本地文件安全性、全屏模式等。
b)、"全局 Flash Player 信任"目录:当某些SWF文件被指定到这个受信任的目录下时,这些SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它SWF文件进行交互,也可以从任意位置(远程或本地)加载数据。该信任目录的默认路径为:C:\windows\system32\Macromed\Flash\FlashPlayerTrust。
2、用户控制:
相对于第1种,这里的用户是指普通用户。有这三种类型的控制:
a)、摄像头与麦克风设置:还记得ClickJacking的那个Flash DEMO么?
b)、共享对象存储设置:就是那个SharedObject了。
c)、相对与"全局 Flash Player 信任"目录,用户权限这也有个"用户 Flash Player 信任"目录。默认路径:C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust。
3、Web 站点控制(跨域策略文件):
就是家喻户晓的crossdomain.xml文件了,现在的安全策略是该文件只能存放在站点根目录下了,文件格式如:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
随便看个例子:http://fanfou.com/crossdomain.xml。通过该文件的配置可以提供允许的域跨域访问本域上内容的权限。
4、作者(开发人员)控制:
开发者可以通过编码(在AS脚本中)指定允许的安全控制权限,如:
Security.allowDomain("www.xeye.us");
当然都支持通配符*了。这个通配符真是个瘟神,程序员可得谨慎使用,以免添加不必要的安全风险。
好,Flash Player的权限控制明了之后,现在可以来看看安全沙箱了。
1、远程沙箱:
这个远程沙箱控制着远程域上,浏览器环境中的安全策略,比如http://xeye.us/域中的Flash文件就无法单刀直入地与http: //hi.baidu.com/ycosxhack域上的Flash文件交互。同一个域(严格域)下的所有文件属于一个沙箱,沙箱内的对象是可以互相返回,而沙箱之间的对象需要交互的话,得靠上面介绍的权限控制的“Web 站点控制(跨域策略文件)”与“作者(开发人员)控制”进行了。
2、本地沙箱:
出来个本地沙箱,没办法,Flash与Flex文件可以在我们的桌面环境下运行。如果没有个很好的安全策略来限制这些功能不弱的AS脚本的话,那绝对是很危险的事。
它有三种类型:
a)、只能与本地文件系统内容交互的本地沙箱:顾名思义,就是该Flash文件在本地运行时是不能与网络上的对象进行通信的,而只能与本地对象进行交互。
b)、只能与远程内容交互的本地沙箱:还是顾名思义,此时的Flash文件要与远程域对象交互时,需在远程域上通过策略文件或以Security.allowDomain编码方式来设置访问策略(同远程沙箱)。此时不能访问本地文件。
c)、受信任的本地沙箱:完美了,上面介绍的权限控制中,管理用户与普通用户都有Flash Player信任目录的控制权限,只要将我们的SWF文件放到受信任目录内运行,那么这个Flash文件就可以与本地域和远程域通信了:)。
当然以上这些沙箱类型,我们可以通过编码来确定当前运行的Flash文件被分配到什么类型的沙箱中。还是通过Security类:Security.sandboxType,值:
Security.REMOTE(远程沙箱)
Security.LOCAL_WITH_FILE(只能与本地文件系统内容交互的本地沙箱)
Security.LOCAL_WITH_NETWORK(只能与远程内容交互的本地沙箱)
Security.LOCAL_TRUSTED(受信任的本地沙箱)
恩,Flash的安全沙箱就是这些笔记了,写到这,还不得不提下Flash的一些其他安全问题。这些安全问题大多围绕安全沙箱进行。
在我们发布Flash时生成的HTML文件内, <object>与 <embed>标签内的几个属性需要明确的。
allowNetworking:
该参数控制Flash文件的网络访问功能。有三个值:all(所有的网络API都可用)、internal(除了不能使用浏览器导航和浏览器交互的API外,其它的都可用)、none(所以网络API都不可用)。
allowScriptAccess:
这是AS与JS通信的安全控制,还记得ExternalInterface的作用吗。有三个值:never(ExternalInterface的 call方法不能与HTML的JS脚本进行通信)、sameDomain(同域内就可以了,这是默认值)、always(这个就允许所有域了,比较危险)。
allowFullScreen:
全屏模式的安全问题,这是一个boolean值,默认为false,不允许Flash全屏。全屏带来的安全问题莫非是用户界面欺骗这样的类型?我不是很清楚。
上面这三个属性得区分好了啊。安全问题不仅这点,还有比如LocalConnetion的本地通信、共享对象SharedObject的使用、 E4X在AS中的使用、其它的Socket通信、一些网络API,比如全局的navigateToURL、Flash与其它非Flash的外部对象的通信问题等等。这些安全问题大都围绕安全沙箱进行。Flash或者Flex文件可以做得很漂亮,很精彩,比如那些非常优秀的Flash动画与游戏,然而一定得时刻保持警惕。
文章二:http://blog.csdn.net/aizyhan/archive/2009/02/04/3862680.aspx
关于Flex安全沙箱问题的解决
最近遇到了flex 的安全沙箱问题,找了很多资料发现不是都是和我,我的程序需要socket连接,而大多数讲的都是跨域文件读取的。我先把两种方法都总结出来:
跨域文件读取
方法一:在目标服务器上布署crossdomain.xml文件(我用的此方法很管用,放上就没问题了) 需要远程服务根目录定义有crossdomain.xml文件,如下:
<?xml version="1.0" encoding="UTF-8" ?> <cross-domain-policy> <allow-access-from domain="*"/> </cross-domain-policy>
方法二:使用代理,把Flex要访问的远程文件通过asp, php, jsp等脚本读取到本地,然后再由Flex去访问;
方法三:使用Adobe flash player 9 打开程序后,点击菜单栏中文件->创建播放器...即生成exe文件,运行exe文件即可突破安全限制;
方法四: 1、找到这个文件夹:c:\Documents and Settings\<UserName>\Application Data\Macromedia\Flash Player\#Security 2、在其下建立一个名为"FlashPlayerTrust"的文件夹 3、在"FlashPlayerTrust"文件夹下新建一TXT文件,内容如下: c:\ d:\ e:\ f:\ 4、将该txt文件命名为:"myTrustFiles.cfg" 再打开你硬盘里的SWF文件,就不会出现那个烦人的安全设置提示窗口了!
方法五: 用HttpService它默认是有Proxy的,需要配置flex-config.xml,里面有一段: <http-service-proxy> <whitelist> ……………… </whitelist> </http-service-proxy>
这个是白名单,一般情况下是注释掉的,也就是默认只有本地的http://{localserver}/*和https://{localserver}/*可以访问。其他的需要在flex-config.xml里的自行修改成需要的就可以了。
访问本地自然不会跨域,不过你肯定访问局域网其他机器了,所以是依照白名单规则,属于跨域
Socket沙箱问题
在Flex中使用Socket进行通信时,也会受到Flash9的新安全策略的困扰. 解决方法不能像在Web服务器中布置一个crossdomain.xml来解决,或是在服务器上专门开启843端口来提供安全策略. 有一种方法就是在接收到客户端的连接后,向其发送 安全策略.
比如我是用JAVA来开发, 客户端的Flex会先搜索同域,及服务器的843口,看是否能得到安全策略,这时候Socket是先建立好的,可以在接收到Socket ,即Accept事件发生是,马上向其发送 策略串,否则客户端就会因为安全策略不过关,于断开, 如果成功获取策略,则客户端将断掉先前的那次Socket, 再真正进行程序中你要求的Socket连接请求.
文章三:http://blog.csdn.net/jiabangok/archive/2009/04/16/4075210.aspx
1.网络访问的swf文件,Security.sandboxType值为remote,这种情况下通过服务器上的跨域文件crossdomain.xml判断是否能够跨域访问。比如http://site1/flash1.swf需要访问http://site2上的资源,则需要在site2服务器上crossdomain.xml中添加site1的访问许可。
2.本地访问的swf文件,Security.sandboxType值为localTrusted、localWithNetwork、localWithFile三者之一。localWithNetwork仅允许访问网络资源,localWithFile仅允许访问本地资源,localTrusted两者均可。Flash9 Debug版本默认为localTrusted(?待确认),Flash10 Debug版本默认为localWithNetwork。
因此在使用Flex进行编译时,如果访问本地资源将会产生安全沙箱错误。
解决方法一:更改工程属性,Flex Compiler - > Additional compiler arguments
(Flex3),加上"-use-network=false",该选项强制Security.sandboxType为localWithFile,带来的问题是无法访问网络资源.
解决方法二:更改工程属性,Run/Debug Settings - > Main ->Url or path to lauch,改为通过Url加载Flash,这样Security.sandboxType为remote,本地资源的相对路径也将作为网络相对路径进行访问。
解决方法三:通过设置Flash Player Trust directory,将swf文件所在目录放入Flash Player Trust directory中,这样该swf安全沙箱类型Security.sandboxType为localTrusted。(但该方法在Window Server 2003,Flash 10 Debug环境下暂未通过)
内容主要转载自:http://hi.baidu.com/wurongle_1987/blog/item/9130228adf9909739e2fb4ea.html
如转载,请把这个链接写上去,支持原创。
分享到:
相关推荐
同时,考虑到安全性,可能需要处理Flash Player的安全策略文件(Policy File),以允许Socket连接到非本机或非标准端口。 总的来说,ActionScript3.0 Socket编程提供了强大的网络通信能力,但同时也需要开发者具备...
根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍有关ActionScript 3.0 (AS3) 中Socket编程的基础知识与应用实践。 ### 一、ActionScript 3.0 Socket简介 #### 1. Socket概念 在ActionScript 3.0中...
ActionScript---ActionScript
1. **视频组件(VideoDisplay)**:这是FLEX中用于显示视频流的基本元素,可以加载FLV或F4V格式的视频文件。 2. **NetConnection**:负责与服务器建立连接,以便于获取视频数据。 3. **NetStream**:在连接建立后...
1. **Socket连接**:客户端使用Socket类的connect方法连接到服务端的IP地址和端口号。 2. **数据流处理**:Socket对象的readUTFBytes方法读取接收到的数据,writeUTF方法用于发送UTF-8编码的字符串。 3. **事件驱动...
1. 安全策略文件:Flash Player在尝试使用Socket连接时,会遵循严格的网络安全策略。默认情况下,它会向服务器的843端口发送一个`policy-file-request`请求,等待服务器返回一个安全策略文件。这个文件定义了允许...
总是会有人做这样的事情,不管是Java还是.Net,解析类的语言...darknet放出的 Flare让人们可以在Dos/Windows,Mac OS,Linux x86,Linux x86 64-bit,Solaris x86这些平台下,都可以将Flash的SWF反编译取出ActionScript。
- 当客户端首次尝试与服务器建立 Socket 连接时,Flash Player 会首先发送一个 `policy-file-request` 消息到服务器,请求获取安全策略文件。 - 服务器需要根据这个请求返回一个正确的 `cross-domain.xml` 文件。 ...
1. **Socket类介绍** Flex中的Socket类是AS3的一部分,位于`flash.net`包中,它提供了建立和管理TCP套接字连接的能力。Socket类允许我们创建一个到服务器的连接,并通过这个连接发送和接收二进制或文本数据。 2. *...
1. **基础语法**:ActionScript3采用了更严格的类型系统,与ActionScript2相比,它更加静态和强类型。你将学习到变量声明、数据类型(如Number、String、Boolean等)、运算符、流程控制(如if语句、for循环、while...
通过学习这个实例,开发者可以了解如何在Flash中实现低延迟的实时通信,以及如何处理跨域策略文件以确保安全的socket连接。对于想要深入研究Flash与服务器通信的开发者来说,这是一个宝贵的资源。
ActionScript是Adobe Flash中用于创建交互式动画和应用程序的核心编程语言。在Flash MX 2004中,ActionScript经历了显著的改进和发展,使得它成为一个更强大的脚本语言。本章详细介绍了ActionScript的基本语法、变量...
FlashSocket.IO, 帮助 Flash,Flex和ActionScript客户端连接到 socket.io 服务器的库 FlashSocket.IO支持Flex应用程序和 socket.io 服务器之间通信的Flash 库。真正的web socket通信由我的gimite/web-socket-js项目...
3. **policyServer.py** - 这可能是一个专门用来处理Flash Player的安全策略文件请求的服务器。在Flash中,为了防止跨域访问,客户端需要先获取服务器的政策文件。Policy Server通常用来提供这样的文件,允许Flash...
1. **SWF格式**:SWF是ShockWave Flash的缩写,是由Adobe公司开发的一种用于网页上的动画和交互式内容的文件格式。它广泛应用于在线游戏、广告和多媒体教学等领域,基于Flash技术创建。 2. **Flash Player**:SWF...
FLASH四宝贝之-使用ActionScript 3.0组件FLASH四宝贝之-使用ActionScript 3.0组件
1. **初始化Socket连接**:在AS3中,使用Socket类的connect()方法连接到服务器,指定IP地址和端口号。 ```actionscript var socket:Socket = new Socket(); socket.addEventListener(Event.CONNECT, onConnect); ...
1. **第1章:ActionScript 3.0基础** - 了解ActionScript的历史和版本变化 - 掌握AS3.0的基本语法,如变量、常量、数据类型(包括基本类型和复杂类型) - 学习条件语句(if/else)和循环结构(for、while、do/...