Flash:我可以禁止ExternalInterface访问加载的SWF吗?

时间:2012-03-05 19:22:07

标签: flash security externalinterface

我们有一个Flash应用程序(AS3)。 这是一个在我们自己的投影仪中运行的桌面应用程序。 没有空气。 投影机是用C ++编写的。 投影机通过ExternalInterface为Flash部件提供对Windows API的间接访问。

现在我们想让我们的社区创建插件。 只是让他们用一些动作脚本3制作一个小动画图片。

插件将在运行时作为外部.swf文件加载。 当然,我们希望我们的用户在网上分发插件。

但是,我们有安全问题。 如果某个坏人会利用间接访问Win API会怎么样?

我做了一个小测试。 加载到程序中的子.swf尝试调用ExternalInterface方法。 事实证明,child.swf能够做到这一点。 因此,加载到我们程序中的每个.swf文件都将自动访问Win API。

为我们的程序下载插件变得和.exe文件一样危险。

我们可以禁止对加载的.swf进行ExternalInterface访问吗? 如果不是 - 在安全性考虑的情况下,如何在AS3中实现插件系统?

我很感激任何有用的提示。

3 个答案:

答案 0 :(得分:1)

我不知道AS3中有任何明确的方法。但这就是我的建议:

  • 在访问WinAPI之前,请让主SWF回调以授权请求。

  • 如果请求是由主SWF提出的,则授权应该是 成功。

  • 如果子SWF发出请求,主SWf将拒绝该请求。


修改

孩子swf可能并没有真正改变主要的SWF电话。如果是这样的话,你实际上可能会从主体上将它从主体中移回。除了不是孩子的外部接口,主swf。

无论哪种方式,插件编写者都很难知道除非你共享它,否则甚至不会知道身份验证功能的签名。

答案 1 :(得分:0)

您需要为swf文件创建新流程以实现自己的sand box。我认为最好是启动一个真正的空中组件(一个新的exe文件)来处理这个swf

答案 2 :(得分:0)

如果你问我,我会在我的投影机中添加代码,以便能够判断加载的swf是插件还是主应用程序。

然后,就像询问主程序是否发起externalInterface调用一样容易。

一件容易的事就是加密swf中的当前时间戳并将其发送到投影机,投影机然后会解密参数并验证呼叫。

当然,任何此类解决方案都绝对要求您的C ++投影机和SWF 非常 进行模糊处理。