用过Flash socket的同学都知道,Flash socket通讯有安全沙箱问题。就是在Flash Player发起socket通信时,会向服务端获取安全策略,如果得不到服务端响应,flash将无法连接到服务端。

首先,什么是Flash安全沙箱?

Flash安全沙箱是Flash Socket的一种安全策略,为避免任意Flash终端与目标主机建立Socket通讯,以授权端口,域名方式限定连接。

那么,Flash Player怎么获取Socket策略?

Flash Player发起socket通信请求的时候会先连接服务器端的843端口,获取Socket策略。当服务器没有开启843端口的时候,Flash Player会检查发起请求的flash程序中有没有使用Security.loadPolicyFile来加载Socket策略,如果还是没有就会看这个发起请求的连接的目标端口有没有Socket策略。如果都没有,那么Flash Player将触发连接失败的Socket事件,即SecurityErrorEvent.SECURITY_ERROR。

备注一下,Security.loadPolicyFile的用法为:Security.loadPolicyFile("xmlsocket://127.0.0.1:8080");

再来看看Socket策略的格式

1、以下是最简单的Socket策略,就是不做任何限制的:

  1. <cross-domain-policy>
  2. <allow-access-from domain="*" to-ports="*"/>
  3. </cross-domain-policy>

2、如果要限制某个域名或者ip,可以这样写:

  1. <cross-domain-policy>
  2. <allow-access-from domain="*.example.com" />
  3. <allow-access-from domain="192.168.5.110" />
  4. </cross-domain-policy>

3、限制端口可以这样定义:

  1. <cross-domain-policy>
  2. <allow-access-from domain="*" to-ports="507" />
  3. <allow-access-from domain="*.example.com" to-ports="507,516" />
  4. <allow-access-from domain="*.example.com" to-ports="516-523" />
  5. <allow-access-from domain="www.example.com" to-ports="507,516-523" />
  6. </cross-domain-policy>

4、完整的socket策略要怎么定义?

看一下这个示例:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
  3. <cross-domain-policy>
  4. <site-control permitted-cross-domain-policies="master-only"/>
  5. <allow-access-from domain="swf.example.com" to-ports="123,456-458" />
  6. </cross-domain-policy>

其中,site-control告诉Flash Player,服务端支持哪种socket策略。设为master-only表示这个策略是服务端唯一的策略,Flash Player不要去支持服务端其他socket策略。还可以设为all和none。all表示所有端口的策略都是可信的,none是拒绝所有连接。

最后,再来看下Flash Player获取Socket策略时发什么请求信息给服务端?

Flash Player发起socket连接请求会向服务端发23字节的字符数据:<policy-file-request/>

细心的同学会观察到,<policy-file-request/>只有22字节,怎么还多了1个字节呢?

这里有一点要注意,<policy-file-request/>后面还多带了一个NULL 的字节数据。

参考转自:

http://blog.csdn.net/mycwq/article/details/24675773

最新文章

  1. 说说APP接口中的版本控制
  2. Java框架Struts2
  3. CSS样式--实际开发总结
  4. 时间“Thu Aug 14 2014 14:28:06 GMT+0800”的转换
  5. Sql server中访问Excel---select from Excel
  6. Linux mysql 主从复制
  7. I.MX6 driver goto 使用
  8. Starling性能优化技巧十五则
  9. 【Android - 进阶】之事件分发机制
  10. 基于Jquery+Ajax+Json实现分页显示
  11. jQuery Validation让验证变得如此easy(一)
  12. html+js+ashx+easyui+ado.net权限管理系统
  13. Python 购物车----之用户部分
  14. C# 哈希表(Hashtable)用法笔记
  15. Html5本地存储和本地数据库
  16. hdfs核心主件服务的启停方式
  17. 一些值得收藏的MySQL知识链接
  18. 环境变量(environment variable)
  19. Windows平台下tomcat+java的web程序持续占cpu问题调试
  20. POJ3621:Sightseeing Cows——题解

热门文章

  1. react 使用antd的在图片列表或表格中实现点击其他元素Checkbox选中功能
  2. Codeforces Gym100814 F.Geometry (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
  3. 在C#用进程打开cmd与直接手动打开cmd是不一样的
  4. (21)Oracle表查询进阶
  5. A Wasserstein Distance[贪心/模拟]
  6. Go语言调度器之主动调度(20)
  7. superagent-promise
  8. 2016北京集训测试赛(六)Problem B: 矩阵
  9. 2013年9月29日 iOS 周报
  10. Android Actionbar 添加返回按钮