我对使用Flash的方法security.allowDomain中使用通配符作为安全域的风险提出了疑问。
假设Flash应用程序唯一能做的就是连续显示一些帧或图像,并且没有任何令人兴奋的功能。 Flash应用程序实现System.security.allowDomain('*'),但服务器没有跨域策略文件。
来自allowDomain documentation的第一张图片显示恶意SWF可以使用Flash应用程序的所有功能和通配符安全策略。但是因为这个应用程序没有任何令人兴奋的功能,所以这不是问题。
如果没有功能,恶意SWF是否可以从Flash应用程序中窃取cookie或其他数据? Adobe将跨脚本定义为:
movieA.swf可以在movieB.swf中检查和修改变量,对象,属性,方法等
这是否意味着恶意SWF可以修改函数以在Flash应用程序的安全上下文中返回cookie或执行JavaScript?
另一个资源this tutorial page讨论了跨域策略文件和allowDomain函数之间的区别:
加载到当前安全域的SWF的信任超出了通过allowDomain给出的信任。而使用allowDomain,你可以有效地提供SWF 你可以做的任何事情,我可以做权限,当你将SWF加载到同一个安全域时,你可以按照的方式给予他们权限。做任何事情。
但让我感到困惑的是该页面描述了由于loadBytes方法而导致这种差异不存在:
你可以做的任何事情,我可以做和我可以做任何事情之间的区别。不同的是,实际上没有区别。
那么allowDomain('*')的风险是什么,但是没有功能或跨域策略文件?
答案 0 :(得分:1)
真正的区别在于allowDomain
允许在代码级别进行跨域访问,而crossdomain.xml
可以被视为允许访问静态内容文件。
这是否意味着恶意SWF可以修改函数以在Flash应用程序的安全上下文中返回cookie或执行JavaScript?
使用allowDomain
时,仅当包含此信息的公共方法或变量或在SWF中允许此功能时才会使用。{/ p>
使用crossdomain.xml
,exploit like this are available,可以通过无限制的Flash域设置绕过Same Origin Policy。它不是完全访问权限,因为攻击者无法直接读取cookie,但如果网站功能允许,他们可以使用它们来检索其他数据。
即。您将允许任何托管SWF的域向您的域发出请求,然后检索响应。因此,您的用户可以通过您网站上的网络浏览器查看的任何信息,攻击者也可以检索(假设您的用户已登录到您的网站并使用相同的浏览器浏览攻击者的网站)。
但让我感到困惑的是该页面描述了由于loadBytes方法而导致这种差异不存在:
如果您信任其他域的SWF,那么可以使用loadBytes
加载另一个SWF。例如您的域A
可能信任域B
但不信任C
。如果您从域B
加载SWF,则该SWF可能会使用C
从域loadBytes
加载某些内容,从而破坏您的信任模型。
答案 1 :(得分:0)
据我所知,正如袭击者所喜欢的那样,让你的瑞士法郎做起来是理所当然的。
从Loader.loaderBytes()
开始,注入代码并使其由当前应用程序域加载非常容易。
另外,我不明白为什么一个简单的应用程序"只是"连续显示图像"需要Security.allowDomain
。
*
策略文件是非常危险的,因为攻击者可以从他拥有的任何域中读取您的cookie或代表用户提交请求。
我建议您重新考虑在Security.allowDomain
中使用wildcar,并且只允许您信任的域名。