我一直在读Adobe已经在flash 9-10中使crossdomain.xml更加严格,我想知道有人可以给我贴一份他们知道有用的副本.在Adobe的网站上找到最近的样本有些麻烦.
其实我希望我知道从哪里开始......
我在我的个人网站上嵌入了第三方SWF图像库控件.
SWF是XML驱动的.我动态加载XML文件如下....
var flashvars = { xmlPath: "http://www.example.com/xml.aspx" };
var params = { allowFullScreen: "true", wmode: "transparent", allowScriptAccess: "always"};
var attributes = {};
swfobject.embedSWF("main.swf", "gallery", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
Run Code Online (Sandbox Code Playgroud)
问题是页面没有按预期工作.实际上它只适用于Firefox,而不适用于Chrome或IE
用fiddler检查请求后,我发现找不到文件crossdomain.xml.所以,stackoverflow帮助我找到了一个样本......
<?xml version="1.0" ?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
Run Code Online (Sandbox Code Playgroud)
添加crossdomain.xml后,网页现在可以在Firefox和IE浏览器中使用在Chrome中我仍然有问题.
所以这里有几个问题......
1)什么是crossdomain.xml?
2)如何让我的网页也能在Chrome中运行?
我有一个小型客户端/服务器测试应用程序,我有一个Flex应用程序,它发出服务器应用程序的HTTP请求.服务器应用程序是在我的本地计算机上运行的脚本,侦听端口8001.客户端是我在本地运行的swf,mx.rpc.http.HTTPService
用于发出页面请求.
HTTPService的设置如下:
_HttpService = new HTTPService();
_HttpService.url = "http://localhost:8001";
_HttpService.contentType = "text/xml";
Run Code Online (Sandbox Code Playgroud)
当我发出基本页面请求时,我的服务器应用程序首先收到一个"GET /crossdomain.xml HTTP/1.1"
请求,因为我没有安装crossdomain.xml文件而失败.我没有到位的原因是因为这一切都发生在我的本地机器上(现在),我不应该需要一个(我不认为).
当我使用Flex 3.x时,我确实在没有crossdomain.xml的情况下使用了此代码.我以为我也使用过Flex 4.现在我正在使用Flex 4.5.这里是否存在问题,可能是由于安全策略的变化?
所有这些都发生在localhost上,为什么Flash播放器会请求crossdomain.xml文件?
如果它有帮助,我的AsyncResponder回来的具体错误是:
[FaultEvent fault=[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"] messageId="F43DCBFF-E99A-99CC-57D8-535C13C7CD48" type="fault" bubbles=false cancelable=true eventPhase=2]
Run Code Online (Sandbox Code Playgroud) 我有一个新的网站,我正在使用adsense.它是https://viewing.nyc并且正在进行中.我已经在网站上显示了一些adsense广告,并且它们可以正常工作 - 确切地说它们实际上展示了广告 - 但它们在Safari控制台中输出了大量垃圾.
我经常看到的信息是经典:
Blocked a frame with origin "https://googleads.g.doubleclick.net" from accessing a frame with origin "https://viewing.nyc". Protocols, domains, and ports must match.
Run Code Online (Sandbox Code Playgroud)
所以,我已经在这里和那里玩了几天,谷歌搜索解决方案,并试图了解我如何绕过它.我实现了一个crossdomain.xml
包含以下内容的文件:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/crossdomain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*.youtube.com" secure="false"/>
<allow-access-from domain="*.doubleclick.net" secure="false"/>
<allow-access-from domain="*.2mdn.net" secure="false"/>
<allow-access-from domain="*.dartmotif.net" secure="false"/>
<allow-access-from domain="*.doubleclick.net" secure="true"/>
<allow-access-from domain="*.doubleclick.com" secure="true"/>
<allow-access-from domain="*.doubleclick.com" secure="false"/>
<allow-access-from domain="*.2mdn.net" secure="true"/>
<allow-access-from domain="*.dartmotif.net" secure="true"/>
<allow-access-from domain="*.gstatic.com" secure="false"/>
</cross-domain-policy>
Run Code Online (Sandbox Code Playgroud)
但没有成功.问题源于我拥有.nyc
顶级域名和adsense网站.com
吗?有没有解决这些错误的方法?
我想知道将crossdomain.xml添加到应用程序服务器的根目录是否存在任何安全问题?是否可以将其添加到服务器的任何其他部分,并且您是否知道任何不需要服务器具有此文件的解决方法?
谢谢Damien
所以假设我有一个站点,我没有crossdomain.xml或clientaccesspolicy.xml.
这意味着人们无法通过Silverlight或Flash应用程序访问我的网站.
但他们可以使用PHP中的cURL(或其他语言中的等价物)来从我的站点获取信息,并通过REST或WebService等将其提供给他们的Silverlight和Flash应用程序.
有人可以确切地解释这些限制如何保护我的网站,例如跨域脚本吗?
他们在保护什么针对无法PHP /卷曲和等价物来完成做必须通过脚本访问我的网站?
(我看到几个与我的问题有关的问题,但是没有一个解决方案对我有用,因为我在生产中遇到了这个问题,而不是在本地开发期间,我已经尝试了所有提议的修复.)
我有一个使用IIS托管的WCF服务的Silverlight 4应用程序.在生产中,这些服务通过HTTPS访问.尽管有一个有效的crossdomain.xml文件,我仍然在访问服务时得到着名的"安全错误":
__CODE__
使用Fiddler我可以看到没有请求crossdomain.xml或clientaccesspolicy.xml.有一个CONNECT请求到服务器,但这就是全部.
我已经读过,当服务器发出无效证书时,也会引发此错误,虽然它表示有crossdomain.xml/clientaccesspolicy.xml的问题.在我的场景中似乎并非如此.
我确信以下设置正确:
1.crossdomain.xml有效并托管在站点的根目录
2.服务确实有效(我们有其他客户使用各种技术,包括依赖于跨域的Adobe Flex .xml.)
3.Silverlight应用程序确实有效(它可以在共享开发服务器上运行本地服务和服务***)
4.Silverlight应用程序甚至不尝试请求crossdomain.xml或clientaccesspolicy.xml(如由Fiddler确认)
5.Silverlight应用程序使用适当的配置通过https访问WCF.以下是配置:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyServices" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://MYDOMAIN/MYSERVICE.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyServices" contract="Services.IMyServices" name="BasicHttpBinding_IMyServices" />
</client>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
还有什么可以导致这种问题?可能是因为Web服务器是负载平衡的吗?或者我没有注意到证书有问题吗?如果你能够至少指出我正确的方向,将非常感激.
(***值得一提的是:我在开发环境中遇到了类似的问题.尽管有一个正确的crossdomain.xml而且没有使用HTTPS,Silverlight应用程序无法在共享开发服务器上访问WCF服务.我在周围工作它通过在IE中将开发服务器添加为可信站点.然而,这种相同的解决方法不适用于生产,即使这样也不是一种可接受的解决方法.但是我必须在开发环境中执行此操作才能使我担心我一路上都错过了什么......)
https wcf crossdomain.xml clientaccesspolicy.xml silverlight-4.0
更改托管Flash应用程序的域名后,我应该更改crossdomain.xml文件.该crossdomain.xml托管在api-server上,由flash应用程序使用.我看到flash使用浏览器缓存中的crossdomain.xml.是否有任何技巧使flash无法从缓存中获取crossdomain.xml?也许有任何参数,我可以在对象标签调用期间传递给flash?
它是wwwroot,C,托管资产的根虚拟目录,还是资产所在的同一文件夹?
这意味着如果我有一个带有子目录'swf'的虚拟目录'virdir',它实际上就像C:\ somedir\assets\swf \,那么crossdomain.xml需要去哪里以便我的swf应用程序位于不同的服务器上可以访问swfs?
有没有人有Java从其他域提取数据的经验?假设我的客户至少有1.6.0_10,它的工作能力有多大.我看过一些帖子说它有效,然后其他人说它没有,还有一些人说它在后来的微更新中被打破了.任何见解将不胜感激.
谢谢,
-担
crossdomain.xml ×10
flash ×6
apache-flex ×2
cross-domain ×2
adsense ×1
applet ×1
asp.net ×1
html ×1
https ×1
iis ×1
java ×1
security ×1
silverlight ×1
ssl ×1
swfobject ×1
tld ×1
wcf ×1