Sunday, January 13, 2008

关于FLASH9.0.115+的cross-domain-policy

FLASH从9.0.115之后、cross-domain-policy有一些变化:主要变化之一是严格啦、原先当SWF图和他(通过http/shttp/ftp等)所来的那个域的主机做xmlsocket链接时、不需要cross-domain-policy、而现在一律需要。所以在9.0.115之后、无论企图链接的主机是那个域、一律要先去那个主机的843口去找cross-domain-policy:即发出如下串:
[policy-file-request/] +“\0” (编程时把”[ ]“ 换成”< >“)

当得到一个如下的答复后:
- 符合以下crossdomain.xml格式:
[?xml version=\"1.0\"?]
[!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"]
[cross-domain-policy]
[allow-access-from domain=“*" to-ports="12000" /]
[/cross-domain-policy]
(编程时把”[ ]“ 换成”< >“)

- 上述串结尾于“\0”
- policy服务器端发完上述串+“\0”后,关闭这个(TCP)链接。

符合上述3个条件/被认为是合法的cross-domain-policy,然后FLASH一侧再次想真正要去的端口再发起一次连接(刚才是找POLICY)

如果在3秒之内没有在843口得到回复。或回复格式错误,或回复说这个端口不能被这个SWF访问,则再次向真正的端口发出+“\0”进行查询,如果回复可行则再次断开,然后再次重新和该端口连接,反之则停止。

另外,据中外网友反映和我的实验,9.0.115之后通过loadPolicyFile来试图在XMLSOCKET之前调入CROSSDOMAIN.XML不管用啦,现在变成按照做上述过程啦。

如果觉得上述过程慢,可以在做真正的XMLSOCKET之前先和要连的端口连一下,再断开:等以后真正要连的时候就快啦。另外,为啦和9.0.115之前的版本兼容,CROSSDOMAIN.XML的格式可能要注意比较核实一下,好像有一点变化。

另外据ADOBE说这是第一次变化、之后政策要要再变一次(共2次变化)。

http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security_05.html

No comments: