如何限制Flex应用程序仅从我的网站运行?

时间:2009-08-05 07:50:10

标签: flex actionscript-3 security

是否可以使Flex应用程序仅从我的域运行?因此,用户无法复制.swf并在本地启动它。

3 个答案:

答案 0 :(得分:4)

在很多情况下,由于与crossdomain.xml相关联的安全模型,这将无法工作。

http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html

比如说,我有一个Flex应用程序,它有一个服务调用并登录到我的后端数据库(可能是PHP和mysql)。除非我在crossdomain.xml策略文件中明确启用它,否则应用程序将无法与我的服务器通信,除非直接从我的域加载swf文件。如果应用程序是本地的,它会看起来像我的服务器,因为localhost试图通过flex应用程序访问我的后端。因此,默认情况下,除非在crossdomain.xml中设置显式规则以允许从localhost访问,否则这将不起作用。同样,除非我将该远程服务器添加到crossdomain.xml策略,否则有人不能简单地将swf放在不同的服务器上并尝试从我的服务器访问。

回到你的问题。显然,如果您的flex应用程序非常简单并且不尝试对服务器进行服务调用,那么这个crossdomain.xml内容并不适用。例如,如果你有一个简单的游戏,只需加载和播放flex游戏中没有额外的服务器调用。

如果您想要保护您的应用,您可以在启动过程中进行基本的“电话回家”过程,从而对您的网站进行非常简单的服务器调用。它不一定非常复杂,只需要在您的应用启动时进行往返服务电话。也许检查存储在PHP端变量中的简单键或字符串,除非该键有效,否则不要让flex应用程序运行。您可以在动作脚本中硬编码预期的键。或者可能有一个基本的记录器,它跟踪应用程序启动的次数并将计数存储在数据库或其他内容中。最重要的是不要让应用程序完全启动,直到对服务器的请求返回有效结果。

如果你有这个,那么crossdomain.xml策略将启动,如果有人下载你的swf它不应该工作,因为它会尝试从localhost拨打你的服务器。或者,如果他们窃取您的应用并将其托管在他们的网站上,它也不应该工作。

答案 1 :(得分:2)

最简单的解决方案可能是检查

的值
Application.application.loaderInfo.url

在应用程序启动时(例如在applicationComplete事件中)并将其与您的网站域匹配。

答案 2 :(得分:0)

也可以在LiveDocs上查看flash.System.Capabilities.playerType。