`

发布HTML跨域安全沙箱

 
阅读更多

         1.当将Flash发布成Html之后,Socket将无法连接。

 

错误代码:

[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

问题原因:

flashplayer升级到9.0.115.0之后,当flash文件要进行socket通信的时候,需要向服务器端获取crossdomain.xml文件。在9.0.115.0之前的版本的flash是可以和socket进行正常通信的。在升级后的版本后,就出现客户端无法连接服务器的现象。

 

 

  2.urlload跨域访问文件

在同一个域名下,在默认的沙箱中,可以访问同域下的所有资源并且可以相互读取和执行彼此的逻辑代码,这是对称的权限。

 

在不同的域名下,默认情况下可以发送信息到其他域,但不能从其他域取数据。

<!--[if !supportLists]-->1.       <!--[endif]-->获取非Swf脚本文件,如:静态文本,图片等。 需要配置crossdomain.xml文件

<!--[if !supportLists]-->2.       <!--[endif]-->获取Swf脚本文件。则需要在本访问的Swf文件中,设置允许其他域的访问

  Security.allowDomain("*"); 

允许所标识的域中的 SWF 文件和 HTML 文件访问包含 allowDomain() 调用的 SWF 文件中的对象和变量。

Security.allowInsecureDomain("*");

允许所标识的域中的 SWF 文件和 HTML 文件访问执行调用的 SWF 文件中的对象和变量,该文件是使用 HTTPS 协议承载的。

 

 

 

关于LoaderUrlLoader跨域读取文件时的注意点:

<!--[if !supportLists]-->1.       <!--[endif]-->当使用Loader读取文件的时候,Flash不会自动载入域名下的crossdomain.xml文件。需要手动的设置:Security.loadPolicyFile("http://192.168.1.80/crossdomain.xml"); 才能加载。

<!--[if !supportLists]-->2.       <!--[endif]-->使用UrlLoader读取文件的时候,Flash直接会自动载入域名下的crossdomain.xml文件。

 

 

Crossdomain.xml 简单配置说明

<cross-domain-policy>

<allow-access-from domain="*" />

</cross-domain-policy>

 

 

 

crossdomain.xml需严格遵守XML语法,有且仅有一个根节点cross-domain-policy,且不包含任何属性。在此根节点下只能包含如下的子节点:

site-control

allow-access-from

allow-access-from-identity

allow-http-request-headers-from

 

site-control通过检查该节点的属性值,确认是否可以允许加载其他策略文件。每个site-control标签有且仅有属性permitted-cross-domain-policies,该属性指定相对于非主策略文件的其他策略文件的加载策略。

permitted-cross-domain-policies属性值有如下情况:

none: 不允许使用loadPolicyFile方法加载任何策略文件,包括此主策略文件。

master-only: 只允许使用主策略文件[默认值]

by-content-type:只允许使用loadPolicyFile方法加载HTTP/HTTPS协议下Content-Typetext/x-cross-domain-policy的文件作为跨域策略文件。

by-ftp-filename:只允许使用loadPolicyFile方法加载FTP协议下文件名为crossdomain.xml的文件作为跨域策略文件。  

all: 可使用loadPolicyFile方法加载目标域上的任何文件作为跨域策略文件,甚至是一个JPG也可被加载为策略文件![使用此选项那就等着被xx吧!]

例:

<cross-domain-policy>

     <site-control permitted-cross-domain-policies="by-content-type" />

</cross-domain-policy>

 

 

allow-access-from通过检查该节点的属性值,确认能够读取本域内容的flash文件来源域。

allow-access-from标签有三个属性:

 

domain:该属性指定一个确切的IP地址、一个确切的域或一个通配符域(任何域)。只有domain中指定的域,才有权限通过flash读取本域中的内容。

Tips:当domain被指定为IP地址时,只接受使用该IP作为网址来访问的来源请求[此时ip地址也就相当于一个域名而已],如domain被设置为192.168.1.100时,使用http://192.168.1.100/flash.swf来请求该域内容是允许的,但是使用指向192.168.1.100的域名www.a.com来访问时[http://www.a.com/flash.swf]将会被拒绝,因为flash不懂得dns解析:

 

to-ports:该属性值表明允许访问读取本域内容的socket连接端口范围。可使用to-ports="1100,1120-1125"这样的形式来限定端口范围,也可使用通配符(*)表示允许所有端口。

 

secure:该属性值指明信息是否经加密传输。当crossdomain.xml文件使用https加载时,secure默认设为true。此时将不允许flash传输非https加密内容。若手工设置为false则允许flash传输非https加密内容。

 

allow-access-from-identity该节点配置跨域访问策略为允许有特定证书的来源跨域访问本域上的资源。每个allow-access-from-identity节点最多只能包含一个signatory子节点。

<allow-access-from-identity>

   <signatory>

     <certificate

       fingerprint="01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67"

       fingerprint-algorithm="sha-1"/>

   </signatory>

</allow-access-from-identity>

 

 

 

allow-http-request-headers-from此节点授权第三方域flash向本域发送用户定义的http

allow-access-from节点授权第三域提取本域中的数据,而 allow-http-request-headers-from节点授权第三方域将数据以http头的形式发送到本域中。[简而言之,allow-access-from是控制读取权限,allow-http-request-headers-from是控制以http头形式的写入权限]

allow-http-request-headers-from包含三个属性:

·domain:作用及参数格式与allow-access-from节点中的domain类似。

·headers:以逗号隔开的列表,表明允许发送的http头。可用通配符(*)表示全部    http头。

·secure:作用及用法与allow-access-from节点中的secure相同。

在下面的示例中,任何域都可以向当前域发送 SOAPAction 标头:

<cross-domain-policy>

     <allow-http-request-headers-from domain="*" headers="SOAPAction" />

</cross-domain-policy>

 

 

 

最后说明:

1allow-access-from标签的domain属性检测:domain属性应根据最小化原则按需设置,仅允许可信任的来源跨域请求本域内容。禁止将该属性值设置为“*”。

2allow-http-request-headers-from标签的domain属性检测:domain属性应根据最小化原则按需设置,仅允许可信任的来源向本域跨域发送内容。禁止将该属性值设置为“*”。

3 site-control标签的permitted-cross-domain-policies属性检测:根据业务的实际需求及可行性,对该属性做相应设置。禁止将该属性值设置为“all”。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics