之前写过一篇使用Flash实现本地存储的文章,介绍如何使用flash存储本地数据。这个方案用在早期IE下是非常合适的,我所在的项目一直在用。出于安全的考虑,我们需要在as代码里设置允许与flash交互的域名,也就是前文代码里的这一行:
Security.allowDomain( "*" ); //修改为自己的域名
|
以前,我是把需要交互权限的域名list编到as文件中,这个list很少需要改,所以一直也没什么问题。最近有意把storage组件放在QWrap提供下载,这个做法就不适用了。GitHub上有个叫SwfStore的同类组件遇到类似的问题,作者写了一段说明,挺有意思的:
=======
Security Warning
=======
The default storage.swf allows any website to read the data in your flash file. You should avoid storing private information in it.
It would be wise to edit and recompile the flash file to limit itself to your domain and http/https settings. If you do not have a copy of Adobe Flash, I can do it for you for $5 - email me for details.
大概是说他的代码默认允许所有网站访问flash存储,用户不要用它存隐私数据;当然更好的做法是把权限改到自己的域名。如果没编译工具,还可以花$5找作者代劳=.=
实际上,只要让flash支持从配置读取域名list就可以把重新编译变为修改配置了。但是配置信息不能随便读,例如把flash地址的query参数作为配置,那就形同虚设。Yui的swfstore组件采用这样的策略:as代码里允许任何domain;使用swfstore时flash先读同目录下的配置xml,与当前页面domain逐一比较,domain包含配置里的url才认为是合法调用,再去执行后面的操作。
按照yui的思路,改造后的代码如下:
这样改完,没有了安全隐患,还达到了灵活配置的目的,完整示例在这里。如果需要封装好的代码可以参考上文提到的两个组件,也可以当下小白鼠使用基于QWrap的瓦岗版组件,这里还有一个老卡同学提供的JQuery版。