我有一个关于使用通配符作为安全域的风险的问题,在使用security.allowDomain的方法中。
假设Flash应用程序所做的唯一事情就是在一行中显示一些帧或图像,并且没有任何令人兴奋的功能。Flash应用程序实现System.security.allowDomain('*'),但是服务器没有跨域策略文件。
来自allowDomain文档的第一个映像显示,恶意SWF可以通过通配符安全策略使用Flash应用程序的所有功能。但是因为这个应用程序没有任何令人兴奋的功能,所以这不是一个问题。
如果没有合适的函数,恶意SWF能否盗取Flash应用程序中的cookie或其他数据?Adobe将跨脚本定义为:
movieA.swf 可以检查和修改movieB.swf中的变量、对象、属性、方法等。
这是否意味着恶意SWF可以在Flash应用程序的安全上下文中修改函数以返回cookie或执行JavaScript?
另一个资源,本教程页,谈到了跨域策略文件与allowDomain函数之间的区别:
赋予加载到当前安全域中的SWF的信任超出了通过allowDomain提供的信任。而使用allowDomain,您实际上给了SWF任何您能做的事情,我可以执行权限,当将SWF加载到相同的安全域中时,您会按照我可以做任何事情的方式授予它们权限。
但令我困惑的是,该页面描述了由于loadBytes方法而不存在这种差异:
这是你能做的任何事的区别,我可以做,我可以做任何事。区别在于,其实没有什么区别。
那么,allowDomain('*')的风险是什么,但是没有功能或跨域策略文件呢?
发布于 2015-03-24 12:12:40
真正的区别在于allowDomain允许在代码级别上进行跨域访问,而crossdomain.xml可以被认为允许访问静态内容文件。
这是否意味着恶意SWF可以在Flash应用程序的安全上下文中修改函数以返回cookie或执行JavaScript?
对于allowDomain,只有当存在包含此信息的公共方法或变量或在SWF中允许此功能时。
使用crossdomain.xml,这样的利用是可用的。允许通过无限制的Flash域设置绕过同一原产地政策。这不是完全访问,因为攻击者不能直接读取cookie,但如果站点功能允许,他们可以使用它们检索其他数据。
也就是说,您将允许任何托管SWF的域向您的域发出请求,然后检索响应。因此,您的用户可以通过您域中的web浏览器看到的任何信息,攻击者也将能够检索(假设您的用户登录到您的站点并使用相同的浏览器浏览攻击者的站点)。
但令我困惑的是,该页面描述了由于loadBytes方法而不存在这种差异:
它的意思是,如果您信任另一个域的SWF,那么这可以使用loadBytes加载另一个SWF。例如,您的域A可能信任域B,但不信任C。如果您从域B加载SWF,则该SWF可能使用loadBytes从域C加载某些内容,从而破坏您的信任模型。
发布于 2015-03-23 10:21:31
据我所知,理论上有可能让你的swf随心所欲。
从Loader.loaderBytes()开始,注入代码并使其由当前应用程序域加载是相当容易的。
此外,我也不明白为什么“简单的应用程序”(它只是“在一行中显示图像”)需要一个Security.allowDomain。
但是,拥有一个跨域*策略文件是非常危险的,因为攻击者可以从他拥有的任何域中读取您的cookie或代表用户提交请求。
我建议您重新考虑在Security.allowDomain中使用通配符,并且只允许您信任的域。
https://stackoverflow.com/questions/29207276
复制相似问题