• RIA跨域安全性浅谈(二)


     上篇写的那个加载一大堆http图片例子我自己测试没问题后发给了客户后,我的电话很快就响起了,用户说程序运行出错,奇怪我这边怎么好好的,通过交流发现用户是将上篇的小例子的swf程序部署在服务器上,通过http的方式运行这个swf,而不是像我直接在FB里面调试运行。

    View Code
    SecurityError: Error #2122: 安全沙箱冲突:Loader.content:http://localhost:3000/HelloTWaver/flex_bin/demo.swf 不能访问 http://cache.mars.sina.com.cn/photoauto_d/model_index/0.jpg?1270088020。需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志。at flash.display::Loader/get content()

     

    这个就是典型的RIA跨域访问限制问题,RIA我指的包含Ajax、Flex、Silverlight甚至是未签名的Applet/JavaFx都会有这种限制,毕竟Flash作为RIA的先驱,所以后来的这些竞争兄弟也不得不兼容Adobe的策略规则,简单说正常情况下RIA程序只允许访问本域名下的资源信息,跨域访问它人的资源信息时就需要看对方域名服务器定义的crossdomain.xml的脸色了,微软虽然兼容crossdomain.xml不过他又搞了一套clientaccesspolicy.xml。

    以下几个主要厂家的官方文档大家可以参考一下
    http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html
    https://jdk6.dev.java.net/plugin2/#CROSSDOMAINXML
    http://msdn.microsoft.com/en-us/library/cc838250(VS.95).aspx

    对于Ajax方面还有很多trickery的解决技巧以下几个可以参考一下
    http://easyxdm.net/
    http://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/
    http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html
    http://www.ajax-cross-domain.com/

    如何没时间细看如何配置成局部允许,根据协议允许等等复杂的配置,你可以用下面两个最让人happy的配置作为开发测试,我挺讨厌这种配置的东西,想想jnlp的协议可以定义的非常变态,但太复杂的规则往往变得没有规则,估计世上95%以上的jnlp都是,微软的Code Access Security (CAS)也成了杯具,当年看CAS就有点头大,就预感这玩意儿怎么可能普及使用,简单是恒古不变的道理。

    crossdomain.xml

    View Code
    1 <?xml version="1.0"?>
    2 <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    3 <cross-domain-policy>
    4 <allow-http-request-headers-from domain="*" headers="*"/>
    5 </cross-domain-policy>

    clientaccesspolicy.xml

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <access-policy>
    3 <cross-domain-access>
    4 <policy>
    5 <allow-from http-request-headers="*">
    6 <domain uri="*"/>
    7 </allow-from>
    8 <grant-to>
    9 <resource path="/" include-subpaths="true"/>
    10 </grant-to>
    11 </policy>
    12 </cross-domain-access>
    13 </access-policy>

    问题似乎都清晰了,不过还有一点疑问,为什么我用FlashBuilder跑的程序能正常运行没有受到这该死的权限限制呢?难道我生成的swf人品比较高,我试着将bin-debug目录下的swf文件移到其他目录一跑也不行了,难道还非得放在FB工程的目录里,查了一下发现还有以下道道,我就不废话了大家看看图就明白了。

    http://kb2.adobe.com/cps/518/cpsid_51814.html
    Each time you create or import a Flash Builder project whose bin-debug directory is outside of the normal Flash Builder workspace location, Flash Builder adds that bin-debug directory to the list of trusted directories;

  • 相关阅读:
    设计模式之观察者模式
    设计模式之备忘录模式
    设计模式之中介者模式
    设计模式之迭代器模式
    设计模式之解释器模式
    设计模式之命令模式
    设计模式之职责链模式
    设计模式之代理模式
    设计模式之享元模式
    设计模式之外观模式
  • 原文地址:https://www.cnblogs.com/twaver/p/2139496.html
Copyright © 2020-2023  润新知