Flash Player升级到9.0.124后,Flex Socket安全策略更改及处理例子

在Adobe Flash Player升级到9.0.124后,由于安全策略更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的手段不能继续使用。更改如下:

  • 1,首先检测目标服务器的843端口是否提供安全策略
  • 2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://) 手段提供安全策略,如果还没检测到,则使用第3步检测
  • 3,检测目标服务器目标端口是否提供安全策略。

在说具体处理方式前,我先描述一下Flash Player的验证过程。在Flex程序发出Socket或XmlSocket(以下统称为Socket)请求前,FlashPlayer会先判断是否为 本地调用,如果不是。即用一个Socket去链接到你的服务端,三次握手成功后一方面发出字符串“<policy-file- request/>\0“另一方面监听返回的安全策略。安全策略接收成功后,FlashPlayer就断开验证的Socket,然后再运行程序本身 的Socket。在整个SWF运行期间,无论你请求多少次,只要域相同,FlashPlayer就只验证一次。这里有两个重点,

  • 第一个是验证的Socket和程序的Socket是两个Socket。所以你在本地测试时,服务端监听到N个Socket请求,但布置到服务端后,服务端会监听到N+1个请求。
  • 第二是验证的Socket发送<policy-file-request/>\0“请求和接收你的策略文件是没有先后关系的,所以你没必要接 收完“<policy-file-request/>\0“后才发策略文件。我的做法是只要监听到请求,就把策略字符串发过去。

上面提供了三种方式处理安全策略。处理的办法差不多一样,就是要求服务端监听一个端口,如果客户端发来“<policy-file-request/>\0“请求,服务端就要返回你的安全策略的字符串。

其实三种处理方式的主要区别在于监听端口,方法1和2要求在另外的端口监听,而第三个即在应用本身监听的端口监听。其实监听端口的数量多一个不如少一个。在虚拟空间中不说了,端口不是说要监听就监听的,要有权限。就算有权限监听,还要防火墙同意。所以我比较偏向于第三种。

在HIM中,我处理的代码如下:

  1. 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(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可能就一直等待。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值