加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash和策略文件

发布时间:2020-12-15 07:16:27 所属栏目:百科 来源:网络整理
导读:最近的项目涉及到flash通过socket和服务器连接,刚接触这方面的内容,遇到了flash通信时安全策略的问题,这里记录下,有遇到相同问题的同学可以参考下。 HTML中的flash和服务器链接最初报错: [SecurityErrorEvent type="securityError" bubbles=false cance

最近的项目涉及到flash通过socket和服务器连接,刚接触这方面的内容,遇到了flash通信时安全策略的问题,这里记录下,有遇到相同问题的同学可以参考下。

HTML中的flash和服务器链接最初报错:[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]。抓包:

flash有发请求但服务器端业务接口中并没有收到请求,抓包可以看到,flash先请求了843接口,但没有成功,重试了一次后,请求了80端口,三次握手之后,发送了一段数据: <policy-file-request/>, 同时在as文件中触发了SecurityErrorEvent.SECURITY_ERROR 事件,通过排查发现是flash要请求安全策略文件。

当封装在页面的flash发起socket通信请求的时候会先寻找服务器端的843端口,获取Crossdomain.xml文件,当服务器没有开启843的时候,flashPlayer会检查发起请求的swf文件中中有没有使用Security.loadPolicyFile来加载策略文件Crossdomain.xml,如果还是没有就会看这个发起请求的swf要连接的目标端口有没有策略文件。如果都没有那么连接失败,返回如上的出错提示

由于测试服务器无法监听843端口,我们想通过监听8080端口来发送策略文件,操作方法是在socket.connect(ip,port)之前调用SWF Security.loadPolicyFile("xmlsocket://server.com:8080");,再试还是相同的错误:

8080端口返回了策略文件但是flash仍然请求了80端口获取获取策略文件,本来是按照文档操作的,带着疑问看了as的文档

as文档描述如下:

默认情况下禁止访问套接字和 XML 套接字连接,即使所要连接的套接字与 SWF 文件位于同一个域中也是如此。可以从下列 任意位置提供套接字策略文件,从而允许套接字级别访问:
? 端口 843 (主策略文件的位置)
? 与主套接字连接相同的端口
? 主套接字连接端口之外的端口
默认情况下, Flash Player 在端口 843 和主套接字连接所在的端口上查找套接字策略文件。如果要从其它端口提供套接字策略文件, SWF 文件必须调用 Security.loadPolicyFile()。 套接字策略文件具有与 URL 策略文件相同的语法,只是前者还必须指定要对哪些端口授予访问权限。如果套接字策略文件来自低于 1024 的端口号,则它可以对任何端口授予访问权限;如果策略文件来自 1024 或更高的端口,则它只能对 1024 端口和更高的端口授予访问权限。允许的端口在 标记中的 to-ports 属性中指定。单个端口号、端口范围和通配符都是允许值。

也就是我们用了8080端口提供的策略文件并不能控制80端口的访问权限。

所以必须开启843端口,或者还是从8080端口获取侧略文件, 但要将主业务的端口改成大于1024。


参考:[ActionScript 3] Flash Socket通信的安全策略问题 843端口(转载)ADOBE? ACTIONSCRIPT? 3.0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读