zoukankan      html  css  js  c++  java
  • 关于Flex安全沙箱问题的解决(转)



    最近遇到了flex 的安全沙箱问题,找了很多资料发现不是都是和我,我的程序需要socket连接,而大多数讲的都是跨域文件读取的。我先把两种方法都总结出来:

    跨域文件读取

    方法一:在目标服务器上布署crossdomain.xml文件(我用的此方法很管用,放上就没问题了) 需要远程服务根目录定义有crossdomain.xml文件,如下:

    <?xml version="1.0" encoding="UTF-8" ?> <cross-domain-policy>     <allow-access-from domain="*"/> </cross-domain-policy>

    方法二:使用代理,把Flex要访问的远程文件通过asp, php, jsp等脚本读取到本地,然后再由Flex去访问;

    方法三:使用Adobe flash player 9 打开程序后,点击菜单栏中文件->创建播放器...即生成exe文件,运行exe文件即可突破安全限制;

    方法四:     1、找到这个文件夹:c:\Documents and Settings\<UserName>\Application         Data\Macromedia\Flash Player\#Security     2、在其下建立一个名为"FlashPlayerTrust"的文件夹     3、在"FlashPlayerTrust"文件夹下新建一TXT文件,内容如下:         c:\         d:\         e:\         f:\     4、将该txt文件命名为:"myTrustFiles.cfg"     再打开你硬盘里的SWF文件,就不会出现那个烦人的安全设置提示窗口了!

    方法五: 用HttpService它默认是有Proxy的,需要配置flex-config.xml,里面有一段: <http-service-proxy>      <whitelist>         ………………     </whitelist> </http-service-proxy>

    这个是白名单,一般情况下是注释掉的,也就是默认只有本地的http://{localserver}/* 和https://{localserver}/*可以访问。其他 的需要在flex-config.xml里的自行修改成需要的就可以了。

    访问本地自然不会跨域,不过你肯定访问局域网其他机器了,所以是依照白名单规则,属于跨域

    Socket沙箱问题

    在Flex中使用Socket进行通信时,也会受到Flash9的新安全策略的困扰. 解决方法不能像在Web服务器中布置一个crossdomain.xml来解决,或是在服务器上专门开启843端口来提供安全策略. 有一种方法就是在接收到客户端的连接后,向其发送 安全策略.

    比如我是用JAVA来开发, 客户端的Flex会先搜索同域,及服务器的843口,看是否能得到安全策略,这时候Socket是先建立好的,可以在接收到Socket ,即Accept事件发生是,马上向其发送 策略串,否则客户端就会因为安全策略不过关,于断开, 如果成功获取策略,则客户端将断掉先前的那次Socket, 再真正进行程序中你要求的Socket连接请求.

    下面看看我找的例子吧!

    public void run() {
    ServerSocket ss;
    String ip = "";
    try {
    ip = InetAddress.getLocalHost().getHostAddress();
    } catch (UnknownHostException e1) {
    e1.printStackTrace();
    }
    String xml = "<cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/>";
    xml = xml + "<allow-access-from domain=\"" + ip + "\" to-ports=\"1234\" />";
    xml = xml + "</cross-domain-policy>";

    try {
    ss = new ServerSocket(port);
    while (!cancle) {
    Socket s = ss.accept();

    BufferedReader br = new BufferedReader(new InputStreamReader(s
    .getInputStream(), "UTF-8"));
    PrintWriter pw = new PrintWriter(s.getOutputStream());
    char[] by = new char[22];
    br.read(by, 0, 22);
    String head = new String(by);
                                         //判断是不是第一求请求连接的安全验证,当客户端连socket时,as3会自动向服务端发送<policy-file-request />这个字符串请求返回策略文件,所以当服务器收到这个串后给client返回就好了。
                                               //如果是返回xML信息
    if (head.equals("<policy-file-request/>")) {
    System.out.println("连接服务器");
    pw.print(xml + "\0");
    pw.flush();
    br.close();
    pw.close();
    } else {
                   //你自己的正常请求处理逻辑
    }

    }
    ss.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aizyhan/archive/2009/02/04/3862680.aspx

  • 相关阅读:
    互联网产品的灰度发布
    丰网速运单号查询快递鸟API接口-丰网速运
    电商系统物流管理之逆向物流退换货流程设计
    用JS进行Base64编码,MD5加密,实现签名验证 调用快递鸟API接口 完成快递单号查询 JavaScript
    京东快递上门取件接口-快递鸟在线下单API
    申通快递上门取件接口-快递鸟在线下单API
    极兔快递电子面单打印API接口-极兔速递
    电子面单模板规格汇总-快递鸟
    澳邮快递单号查询接口-快递鸟API 澳邮中国
    光线速递快递单号查询接口-快递鸟API
  • 原文地址:https://www.cnblogs.com/nianshi/p/1750950.html
Copyright © 2011-2022 走看看