`
vini123
  • 浏览: 38151 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Flash Socket安全问题的全面解析

阅读更多
1、问题描述

      将flash 发布为html格式后,加载页面后,swf 无法与服务器 进行socket 通信。Flash端显示的错误为:
securityErrorHandler信息: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

在服务器端显示的信息是由客户端尝试进行连接,但是无法接受数据 。接受的数据显示为空。

2.问题原因:

最新的Flash player 9.0.124.0,当flash文件 要进行socket通信的时候,需要向服务器端获取crossdomain.xml 文件。如果找不到就出现客户端无法连接服务器的现象。

了解flash发起socket通信的三个过程

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

为什么老版本的Flash player没有这个问题?

从一些官方的一些资料中了解了一下。以前的Flash Player无论你采用urlRequest的http请求方式或者xmlsocket socket方式,他们都共用一个安全策略文件。这个策略文件只要你放在主域的目录下就行了。而现在不行了,现在的策略文件如果你使用http请求方式那么需要把策略文件放在目录下面,如果你使用socket请求方式就必须通过socket端口来接收这个策略文件。

对应调用的方式为:
http请求——》Security.loadPolicyFile(“http://www.xxx.com/crossdomain.xml ”)
socket或xmlsocket请求——》Security.loadPolicyFile(“xmlsocket://www.xxx.com:port”)

怎么将Socke策略文件发给Flash Player

Flash Player在你的socket.connect(“domain”,port)运行 之前,会按照前面描述的三个过程向你的socket服务器的843端口(据说Adobe已经向相关管理机构申请保留843端口给Flash Player用)发送一个字符串 “<policy-file-request/>”,这个时候如果你有一个服务在监听843端口那么收到这个字符串之后,直接按照XML格式发回策略文件就解决了。(注意发回的时候记得加一个截止字符”\0″)

当然你也可以不用843端口自己设置一个端口。因为Flash Player如果在843端口得不到信息,就会检查你是否在你的Flash文件里面自己添加了指定的获取通道,你可以定义一个自己的端口。不过这个时候你不能用http方式,而要用xmlsocket方式。(相当于自动帮你新建了一个xmlsocket对象,然后链接你指定的主机和端口)。比如你想用 1234端口可以在你的Flash里面加这一句 Security.loadPolicyFile(“xmlsocket://www.xxx.com:1234”),需要注意的是这一句要加在你的 socket.connect前面。

还有最后一个办法,就是在你的socket连接端口监听这个请求。比如你用的是 socket.connect(“192.168.1.100″,8888),那么在你的服务器加一段接收字符串”<policy-file- request/>”的代码,当接到这个字符串时将策略文家按照xml格式发到客户端。

关于策略文件的格式(可以在Flash CS3帮助里面的Flash Player安全性——》控制权限概述中找到)

1、针对web应用的策略文件

下面的示例显示了一个策略文件,该文件允许访问源自 *.iflashigame.com 和 192.0.34.166 的 SWF 文件。

<?xml version=”1.0″?>
<cross-domain-policy>
<allow-access-from domain=”*.iflashigame.com” />
<allow-access-from domain=”192.0.34.166″ />
</cross-domain-policy>

注意事项:
默认情况下,策略文件必须命名为 crossdomain.xml,并且必须位于服务器的根目录中。但是,SWF 文件可以通过调用 Security.loadPolicyFile() 方法检查是否为其它名称或位于其它目录中。跨域策略文件仅适用于从其中加载该文件的目录及其子目录。因此,根目录中的策略文件适用于整个服务器,但是从任意子目录加载的策略文件仅适用于该目录及其子目录。

策略文件仅影响对其所在特定服务器的访问。例如,位于 https://www.adobe.com:8080/crossdomain.xml 的策略文件只适用于在端口 8080 通过 HTTPS 对 www.adobe.com 进行的数据加载调用。

2、针对Socket的策略文件

<cross-domain-policy>
<allow-access-from domain=”*” to-ports=”507″ />
<allow-access-from domain=”*.example.com” to-ports=”507,516″ />
<allow-access-from domain=”*.example2.com” to-ports=”516-523″ />
<allow-access-from domain=”www.example2.com” to-ports=”507,516-523″ />
<allow-access-from domain=”www.example3.com” to-ports=”*” />
</cross-domain-policy>

这个策略文件是指定允许哪些域的主机通过那些端口链接

文章来源:http://developbbs.com/?p=129
分享到:
评论

相关推荐

    经典收藏最全php5.0查询手册

    8. 还有问题? 9. 运行时配置 III. 语言参考 10. 基本语法 11. 类型 12. 变量 13. 常量 14. 表达式 15. 运算符 16. 流程控制 17. 函数 18. 类与对象(PHP 4) 19. 类与对象(PHP 5) 20. 异常处理 21. 引用的解释 IV...

    C#仿QQ空间个人站点(.NET+SQL)_WebZone

    6份GDI+程序设计资源整合[全零分] http://download.csdn.net/album/detail/625 2014年移动游戏行业数据分析 http://download.csdn.net/detail/cleopard/8340331 一文读懂2014年全球互联网广告新生态 ...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程59:关于BIWEB常见问题和结构分析 PHP100视频教程60:PHP与数据库代码开发规范 PHP100视频教程61:PHP+Mysql新闻系统的开发一 PHP100视频教程62:PHP+Mysql新闻系统的开发二 PHP100视频教程63:...

    嵌入式Linux应用程序开发标准教程(第2版全)

    4.4 实验内容——使用JTAG烧写NandFlash 4.5 本章小结 4.6 思考与练习 第5章 嵌入式Linux开发环境的搭建 5.1 嵌入式开发环境的搭建 5.1.1 嵌入式交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载...

    PHP程序开发范例宝典III

    让你短时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 PHP程序开发范例宝典 内容提要 《PHP程序开发范例宝典》全面介绍了应用PHP进行网站开发的各种技术和技巧。《PHP程序开发范例宝典》分为20章...

    Google Android SDK开发范例大全(第3版)part2

     《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序...

    《Google Android SDK开发范例大全(第3版)》.pdf

     《google android sdk开发范例大全(第3版)》在上一版的基础上,以android手机应用程序开发(采用android sdk 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...

    Google Android SDK开发范例大全(第3版) 1/5

    《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...

    Google Android SDK开发范例大全(第3版) 4/5

    《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...

    JAVA上百实例源码以及开源项目

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    Google Android SDK开发范例大全(第3版) 3/5

    《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...

    Google Android SDK开发范例大全(第3版) 5/5

    《Google Android SDK开发范例大全(第3版)》在上一版的基础上,以Android手机应用程序开发(采用Android SDK 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计...

    JAVA上百实例源码以及开源项目源代码

    Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例...

    vc++ 应用源码包_1

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_2

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_6

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_5

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_3

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

Global site tag (gtag.js) - Google Analytics