如何解决 Flash 的安全限制问题?

因为希望能够在上传前在本地对图片进行压缩,使用FileReference的load方法加载完本地的图片之后利用JPEGEncoder类压缩了图片,此时再上传图片时就不能使用FileReference的upload方法了,然后我就使用URLLoader类以标准文件上传的方式发送POST请求,结果此时又碰到了一个问题:Flash10.0之后,增加了一个安全限制——当URLLoader以标准文件上传的方式发送POST请求的时候,需要由用户的UI操作(鼠标点击或按键事件)触发。这个安全性限制规定每次发起一个上传文件的URLLoader请求,都必须让用户点击一下鼠标才可以。如果用户选择了20张图片,就要点击20次鼠标。这显然是无法接受的。对于这个问题不知道有没有好的解决方案?

评论 (0)链接2012-02-17 

来自:http://jxzhoumin.blog.china.com/200805/2674278.html
在Flash中导入外部数据,是flash编程常用的方法,利用这种方法结合后台程序可以完成很多强大的功能,但是出于安全上的考虑,这中间也有一些限制。
现在越来越多服务都开放了api供其他程序调用,但是由于这些限制的存在

最大的限制是禁止跨域读取,这一点和Ajax类似,在默认情况下,域名A上的swf程序,是无法读取域名B上的文件或后台程序的。但和Ajax不同的是,flash并不是绝对禁止,如果要让域名A的程序访问域名B的内容,只要在域名B上放置一个xml的文件,通常命名为crossdomain.xml,在文件中声明允许域名A的访问,域名A上的flash程序访问域名B之前,调用System.security.loadPolicyFile()读取这个文件(细节请参考flash帮助),之后就可以访问了。
另外,在本地硬盘上运行的swf程序,只要在全局安全性设置面板中设置永远允许就可以访问任意网站的内容。
还有一种方法就是利用后台程序作为proxy,域名A的swf先调用域名A上的后台proxy程序,后台proxy再调用域名B的程序,最后把结果返回给swf。

crossdomain.xml文件格式

crossdomain.xml的格式非常简单,其根节点为<cross-domain-policy> ,其下包含一个或多个<allow-access-from>节点,<allow-access-from>有一个属性domain,其值为允许访问的域,可以是确切的 IP 地址、一个确切的域或一个通配符域(任何域)。下边是两个例子:

程序代码

  
<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="www.friendOfFoo.com" />

<allow-access-from domain="*.foo.com" />

<allow-access-from domain="105.216.0.40" />

</cross-domain-policy>

程序代码

  
<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="*" />

</cross-domain-policy>

第二个例子允许任何域的访问。对于crossdomain.xml文件存放位置,建议将其存放于站点根目录中!

小飞
小飞
6842
编辑于 2012-03-02
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-17
德问是一个专业的编程问答社区,请 登录注册 后再提交答案