一、安全沙箱
安全沙箱相对于客户而言,是以加载的资源的原始域为基础,把不同域的文件资源分配给不同的组,这个组就叫安全沙箱。
- 沙箱类型:沙箱有5个不同的种类。
- 远程沙箱:来自网络的资源,只能访问授权的网络资源和数据。
远程交互的本地沙箱:只能访问授权的网络资源和数据。可以加载受信任的本地沙箱和只能与远程交互的本地沙箱的SWf,可以加载本地的非SWF内容,但无法访问内容中的数据。 - 本地交互的本地沙箱:只能访问本地资源。 受信任的本地沙箱:可以访问任何域的内容和数据。当然网络的需要授权。
- AIR应用程序沙箱:可以访问任何域的资源和数据。但不允许AIR应用程序沙箱外的文件跨脚本访问应用程序沙箱的代码。
二、权限控制
高到低:管理员控制->用户控制->网站控制-> 开发者控制。
管理员和用户可以在受信任目录添删受信任的路径或者文件。该文件或者该路径下的文件就是受信任的本地沙箱。
三、网站控制
通过在web服务器上配置策略文件使得服务器上资源或者数据可访。
Flash支持2种服务器连接,因此有2种对应的策略文件:URL策略文件(资源加载)和套接字策略文件(低级网络通信)。
Flash要求使用尝试的连接希望使用的协议来传输策略文件。
主策略文件:在默认情况下,Flash首先在服务器的根目录中查找名为crossdomain.xml URL策略文件,和端口843上找套接字策略文件。这些文件叫做主策略文件。对于套接字连接,Flash还会在与主连接相同的端口查找套接字策略文件,但该文件不视为主策略文件。
除指定访问权限外,主策略文件还包含一条元策略语句,指定哪些位置可以包含策略文件。
URL主策略文件默认元策略是master-only,表示仅用主策略文件。
套接字主策略文件默认元策略文件是all,表示主机上任何套接字都可以提供套接字策略文件。
SWF可以通过Security.loadPolicyFile方法来检索其他策略文件或目录,当主策略文件指定了目标位置能够提供策略文件该方法才有效。
在尝试任何需要策略文件之前,务必先调用该方法,Flash会自动将网络请求加入队列并排在对应的策略文件尝试之后。
在检索主策略文件时,Flash会有用3秒等待服务器,如果服务器没响应,就假定主策略文件不存在。但是,对loadPolicyFile的调用没有默认超时值,Flash假定调用的文件存在,在加载文件前会一直等待。因此,可以明确调用该方法来确保主策略文件的加载。
URL策略文件范围:URL策略文件包含单个,该标签中可以包含多个标签来授权域,可以是ip或者域名,但Flash不会进行DNS解析。
预加载策略文件
加载文件和套接字连接是异步,Flash会在等待策略文件加载完才进行。但从加载的文件中提取数据(像素或声音)是同步的,必须先加载策略文件。
设置Loader.load方法中context参数的checkPolicyFile为true,Flash会先检测以加载的策略文件,然后查找主策略文件,同时检查元策略,最后考虑SSecurity.loadPolicyFile方法中的未处理的调用,以检查他们是否在范围内。
四、开发者控制
通过Security.allowDomain方法来对域或者ip授权,同样不DNS解析。
加载内容 和提取数据:必须在同域
跨脚本访问:必须同域
套接字加载数据
套接字连接默认情况下禁止的,即使是同域,除非有策略文件,检查套接字策略文件的顺序:主策略文件->与主套接字连接所在的端口->其他套接字策略文件。 要从其他位置检索策略文件,请先调用加载策文件方法,行如:Security.loadPolicyFile(”xmlsocket://127.0.0.1:8010”)
套接字策略文件的标签比URL策略文件多一个属性to-ports,表示允许的端口列表。如果套接字文件来自低于1024的端口,则他对任何端口开放权限,否则只对1024及以上端口开放。
限制网络API
有2种方式:
1.为了防止恶意行为,需阻止对常用保留端口的访问。任何访问网络URL的API都受到约束,除了直接调用套接字的API,如Socket.connect或者SecurityloadPolicyFile在外。
2.要控制SWF文件
通过在包含SWf的html文件的object和embed标签中设置allowNetworking来控制SWf访问网络的功能。该参数的取值可能为:
”all”:允许所有网络API.
”internal”:允许除浏览器导航和交互外的所有网络API.
”none”:不允许浏览器导航和交互以及SWF到SWF的通信API.