精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-23
文章同时发布在Flash Player升级到9.0.124后,Flex Socket安全策略更改及处理例子
在 Adobe Flash Player 升级到 9.0.124 后,由于安全策略更改,原来 Socket 或 XmlSocket 的应用里的 http 方式加载安全策略的手段不能继续使用。更改如下:
在说具体处理方式前,我先描述一下 Flash Player 的验证过程。在 Flex 程序发出 Socket 或 XmlSocket( 以下统称为 Socket) 请求前, FlashPlayer 会先判断是否为本地调用,如果不是。即用一个 Socket 去链接到你的服务端,三次握手成功后一方面发出字符串“ <policy-file-request/>\0 “另一方面监听返回的安全策略。安全策略接收成功后, FlashPlayer 就断开验证的 Socket ,然后再运行程序本身的 Socket 。在整个 SWF 运行期间,无论你请求多少次,只要域相同, FlashPlayer 就只验证一次。这里有两个重点:
上面提供了三种方式处理安全策略。其实处理的办法差不多一样,就是要求服务端监听一个端口,如果客户端发来“ <policy-file-request/>\0 “请求,服务端就要返回你的安全策略的字符串。
其实三种处理方式的主要区别在于监听端口,方法 1 和 2 要求在另外的端口监听,而第三个即在应用本身监听的端口监听。其实监听端口的数量多一个不如少一个。在虚拟空间中不说了,端口不是说要监听就监听的,要有权限。就算有权限监听,还要防火墙同意。所以我比较偏向于第三种。
在 HIM 中,我处理的代码如下:
protocol.sendStringToSingleClient(protocol.getUser(), "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0"); 这里的 protocol .sendStringToSingleClient 是我自已封装的方法,作用是把字符串发到指定的 socket 。这个方法不是重点,重点是方法参数中的表示策略文件的 xml 字符串和后面的 ”\0” 。我的 xml 字符串意思是允许所有域仿问,具体字段的意思可以参考: http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html ,细节我不说了。另外,一定要注意 xml 字符串后面的 ”\0” ,因为 Flash Player 是用他来做分隔符的,如果你不加上,客户端验证 socket 可能就一直等待。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 7088 次