用过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

[转]浅谈Flash Socket通信安全沙箱的更多相关文章

  1. 浅谈C#Socket

    好不容易把socket通信搞懂一点,比较喜欢做笔记,嘿嘿~ 希望共同学习,共同进步! socket通信是C#中非常基础的一个知识点,我这里用到的是基于Tcp协议的socket通信.Tcp会有三次握手连 ...

  2. 浅谈tcp socket的backlog参数

    最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下. 底 ...

  3. 浅谈android Socket 通信及自建ServerSocket服务端常见问题

    摘  要:TCP/IP通信协议是可靠的面向连接的网络协议,它在通信两端各建立一个Socket,从而在两端形成网络虚拟链路,进而应用程序可通过可以通过虚拟链路进行通信.Java对于基于TCP协议的网络通 ...

  4. 浅谈Socket编程

    浅谈Socket编程 说到Socket,想必大家会觉得陌生又熟悉.许多同学听说过Socket,但仅仅知道它翻译成中文叫做套接字,除此之外似乎并没有太多的了解了.那么今天我就来抛砖引玉地聊一聊Socke ...

  5. 浅谈IM软件怎样建立安全socket连接、登录

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

  6. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  7. 浅谈白鹭Egret

    浅谈白鹭Egret           最近在做一个移动项目,技术选型的时候接触到了白鹭,简单了解了之后觉得挺合适的,最终就选择了这个引擎. 为什么会选择白鹭引擎呢? 我看上他主要有一下几点:   1 ...

  8. Android安全开发之浅谈密钥硬编码

    Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...

  9. [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

    蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...

随机推荐

  1. [LeetCode] Longest Common Prefix 字符串公有前序

    Write a function to find the longest common prefix string amongst an array of strings. Hide Tags Str ...

  2. hdu 1576(逆元)

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. map、hash_map、unordered_map 的思考

    #include <map> map<string,int> dict; map是基于红黑树实现的,可以快速查找一个元素是否存在,是关系型容器,能够表达两个数据之间的映射关系. ...

  4. 爬虫学习笔记(二)http请求详解

    上篇博客里面写了,爬虫就是发http请求(浏览器里面打开发送的都是http请求),然后获取到response,咱们再从response里面找到想要的数据,存储到本地. 咱们本章就来说一下什么是http ...

  5. Codeforces Gym101473 E.Dangerous Dive (2013-2014 ACM-ICPC Brazil Subregional Programming Contest)

    代码: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmat ...

  6. (5)centos图形界面安装

    1.登录 2.先安装MATE可视化桌面 yum groups install "MATE Desktop" 选择y 3.安装X Window System:图形接口 yum gro ...

  7. HDU1086 You can Solve a Geometry Problem too(计算几何)

    You can Solve a Geometry Problem too                                         Time Limit: 2000/1000 M ...

  8. HDFS Scribe Integration 【转】

    It is finally here: you can configure the open source log-aggregator, scribe, to log data directly i ...

  9. java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等

    1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Time ...

  10. ylb: 触发器(Trigger)之Instead Of触发器 [注:没内容]

    ylbtech-SQL Server:SQL Server-触发器(Trigger)之Instead Of触发器 触发器(Trigger)之Instead Of触发器 [注:没内容]. ylb: 触发 ...