第11章 ActionScript教程 - 安全性
第11章 ActionScript教程 - 安全性
Flash Platform 安全概述
安全沙箱
权限控制
限制网络 API
全屏模式安全性
全屏交互模式安全性
加载内容
跨脚本访问
作为数据访问加载的媒体
加载数据
从导入到安全域的 SWF 文件加载嵌入内容
使用旧内容
设置 LocalConnection 权限
控制外出 URL 访问
共享对象
摄像头、麦克风、剪贴板、鼠标和键盘访问
AIR 安全性
一、安全沙箱
AS3加载SWF文件、位图、音频、文本文件、HTML 、介质及其他资源、Internet域中可执行代码等放置在相同的安全分组中,该分组即为安全沙箱。
1. 沙箱规则
* 相同安全沙箱资源始终可以互访
* 远程沙箱的文件中的可执行代码始终不能访问本地文件和数据
一系列域中,只要域名不同,IP不同,即例域名映射到某IP,均为独立的域,各自设置单独的沙箱。
2. 跨沙箱访问
* Security.allowDomain()方法
* URL策略文件
3. 沙箱分类
* 内容数据
内容:媒体,包括运行时可显示的可视化媒体、音频、视频或包含显示媒体的 SWF 文件或 HTML。
提取数据:通过使用Bitmap 对象、BitmapData.draw()和BitmapData.drawWithQuality()方法、Sound.id3 属性或者SoundMixer.computeSpectrum()方法从加载的媒体内容中提取数据。
访问数据:可使用URLStream 、URLLoader、FileReference、Socket 和 XMLSocket 等类从外部文件(如 XML 文件)加载数据,从而直接对其进行访问。
* 远程沙箱
来自 Internet 的资源(包括 SWF 文件)分类到与其原始域对应的单独沙箱中,远程 SWF 文件无法加载任何本地文件或资源。
* 本地沙箱
只能与本地文件系统内容交互的沙箱:本地硬盘文件,通过使用 file: 协议或统一命名约定 (UNC) 路径引用的任何文件放置在在四个本地沙箱之一。保证本地数据不会泄漏到网络或以其他方式不适当地共享。
只能与远程内容交互的沙箱:编译 SWF 文件时,可以指定该文件作为本地文件运行时拥有网络访问权限
受信任的本地沙箱: 注册为受信任(由用户或安装程序注册)的本地 SWF 文件放置在受信任的本地沙箱中,分配到受信任的本地沙箱的 SWF 文件可以与其他任何 SWF 文件交互,也可以从任何位置(远程或本地)加载数据。
AIR应用程序安全沙箱:应用程序沙箱中执行的代码可跨脚本访问来自任何域的代码,但不允许 AIR 应用程序沙箱外的文件跨脚本访问应用程序沙箱内的代码。
3. 实际安全沙箱部署
默认情况下,Flash Player 会从端口 843 查找套接字策略文件。和 URL 策略文件一样,此文件称为“主策略文件”,如果要从其它端口提供套接字策略文件,SWF 文件必须调用 Security.loadPolicyFile()。
套接字策略文件具有与 URL 策略文件相同的语法,只是前者还必须指定要对哪些端口授予访问权限。如果套接字策略文件来自低于 1024 的端口号,则它可以对任何端口授予访问权限;如果策略文件来自 1024 或更高的端口,则它只能对 1024 端口和更高的端口授予访问权限。允许的端口在 <allow-access-from> 标记中的 to-ports 属性中指定。单个端口号、端口范围和通配符都是允许值。
Flash Player 首先在端口 843 上检查是否有主策略文件。如果找到主策略文件,Flash Player 将检查该文件是否含有在目标端口上禁止套接字策略文件的元策略语句。如果未禁止访问,Flash Player 首先在主策略文件中查找适当的 allow-access-from 语句。如果找不到主策略文件,Flash Player 将从主套接字连接所在的端口上查找套接字策略文件。
当 Flash Player 请求策略文件时,它始终会在建立连接后传输以下字符串:<policy-file-request/>;服务器收到此字符串后,即会传输该策略文件。
程序对于策略文件请求和主连接并不会使用同一连接,因此请在传输策略文件后关闭连接。如果不关闭连接,Flash Player 将关闭策略文件连接,之后重新连接以建立主连接。
如果服务器是linux系统,那么我们在http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html,下载flashpolicyd_v0.6.zip
这里有perl和python脚本,安装python或perl后就可以使用,上面的网址有使用说明:
./flashpolicyd.pl --file=../policyfile.xml --port=843(perl)
./flashpolicyd.py --file=../policyfile.xml --port=843(python)
策略文件示例:
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.example.com" to-ports="507,516" />
<allow-access-from domain="*.example2.com" to-ports="516-523" />
<allow-access-from domain="www.example2.com" to-ports="507,516-523" />
<allow-access-from domain="www.example3.com" to-ports="*" />
</cross-domain-policy>
注意:如果domain(域名)是ip,这里一定要写通配符*,不能写ip,否则无法通过安全策略;
声明:本站未注明转载的文章均属本人原创文章,文中所涉及文字、图片、图表、Logo、页面版式以及其他信息等内容均受版权、标签和其它财产所有权法律的保护,请勿用于任何形式的商业用途,转载请保留该声明,并注明出处。茶沫:http://www.cnblogs.com/janas/ 欢迎沟通交流:nofulls@gmail.com