【问题标题】:Flash: can I forbid ExternalInterface access to loaded SWF?Flash:我可以禁止 ExternalInterface 访问加载的 SWF 吗?
【发布时间】:2012-03-05 19:22:07
【问题描述】:

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

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

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

但是,我们有一个安全问题。 如果一些坏人会利用对 Win API 的间接访问呢?

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

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

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

如果有任何可以提供帮助的提示,我将不胜感激。

【问题讨论】:

    标签: flash security externalinterface


    【解决方案1】:

    嗯,我不知道 AS3 中有任何显式方法。但这是我的建议:

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

    • 如果请求是由主 SWF 发出的,那么授权应该 成功。

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


    编辑

    子 swf 可能不会真正覆盖主 swf 调用。如果是这样,您实际上可能会从主目录中恢复它。此外,不是孩子的 externalInterface,主要的 swf。

    无论如何,除非你分享,否则插件编写者甚至很难知道身份验证函数的签名。

    【讨论】:

    • 但是子 SWF 是否可以使用 ExternalInterface.addCallback() 覆盖授权回调方法?我不知道一种或另一种方式,文档没有指定:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
    • 你不能从外部接口区分子 swf 和主 swf 吗?浏览器可以,因此自定义的 externalInterface 必须至少具有此功能
    【解决方案2】:

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

    【讨论】:

    • 我需要将外部 SWF 嵌入到主文件中。因此,打开一个新进程将无济于事。还是谢谢!
    • 使用协议在进程之间说话怎么样?我认为这是您需要寻找解决方案的方向。它将为您提供 100% 的安全性。
    • Babibu,当然,但是插件是我们需要插入到主 SWF 环境中的动画图片。
    【解决方案3】:

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

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

    一个简单的事情是加密 swf 中的当前时间戳并将其发送到投影仪,然后投影仪将解密参数并验证调用。

    当然,任何此类解决方案都绝对要求您的 C++ 投影仪和 SWF极度 被很好地混淆。

    【讨论】:

    • 关于加密的好主意。但我们都知道,这种防御并不是 100% 安全的。因为任何混淆都不是 100% 可靠的。坏人最终可能会找到私钥。问题是我们必须确保插件系统是安全的。否则我们将与黑客进行无休止的战争。还是谢谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多