9.0.124后loadPolicyFile失效问题
在9.0.124前..我们会使用Security.loadPolicyFile()的方法来加载非根目录下的跨域文件
如Security.loadPolicyFile("http://www.conanlwl.net/demo/crossdomain.xml")
可更新9.0.124后..使用还是会报跨域错误..
这是由于9.0.124对安全策略作了一些更新..
引用
在4月份的安全更新之前,crossdomain是可以放于任何位置的,只要在代码中指定Security.loadPolicyFile即可,当然,默认的会首先去找站点根目录下(对于tomcat来说就是root了)。
不过在安全更新之后,flash的安全策略发生了一些变化。
其 中一点就是,将策略文件控制类型由原来的ALL改为了MASTER,MASTER策略文件称为主策略文件,在4月份以前,基本上没人注意这个主策略文件, 和我们常用的策略文件有什么区别。主策略文件是置放在站点根目录下,对整个站点访问权限进行约束的策略文件。这个改变使得默认的必须在站点根目录下置放 crossdomain文件,即使你在自己的站点中需要crossdomain,也必须获得主策略文件的许可。
如果这种限制,就要求一定有对服务器控制的能力,至少你要能在根目录放置文件。但是有些时候,没有这样的权限,因此,官方还提供了另一种做法,在后台代码级别允许提供策略文件来取代master策略。
以.net为例
String policyFile = "....(省略)"
Response.AppendHeader("Content-Type", "text/xml; charset=UTF-8");
Response.AppendHeader("X-Permitted-Cross-Domain-Policies", "all");
Response.Write(policyFile);
这种代码级别的做法就是,在loadPolicy时,reposonse中的header里加上("X-Permitted-Cross-Domain-Policies", "all");然后再返回policyFile。
PS:上面内容来源www.riachina.com论坛中的cimmicola于一篇文章中的回复
地址:http://www.riachina.com/showtopic-12813.aspx
按上面的方法..把原来的XML换成了由ASP提供,保存为crossdomain.aspview plaincopy to clipboardprint?
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<%
var policyFile = '<?xml version="1.0" encoding="utf-8"?>'
policyFile += '<cross-domain-policy>'
policyFile += '<allow-access-from domain="*.l4cd.net" />'
policyFile += '</cross-domain-policy>'
Response.AddHeader("Content-Type", "text/xml; charset=UTF-8");
Response.AddHeader("X-Permitted-Cross-Domain-Policies", "all");
Response.Write(policyFile);
%>
Security.loadPolicyFile("http://www.conanlwl.net/demo/crossdomain.asp")
一切解决..
From: http://www.l4cd.net
评论Feed: http://www.conanlwl.net/Feed/Comment/166.aspx
引用链接: http://www.conanlwl.net/TrackBack/Save/166.aspx
加载评论中...
加载引用中...
加载相关文章中...
