【问题标题】:Securing asp.net web services to be consumed from flash保护从闪存中使用的 asp.net Web 服务
【发布时间】:2010-10-18 03:52:50
【问题描述】:

我的团队正在构建一个嵌入到 asp.net 应用程序中的 Flash 游戏。

当游戏结束时,玩家有机会输入他的名字来保存他的分数。 这是使用从 Flash 调用的 Web 服务完成的。网络服务接收名称和分数。

由于网络服务是公开可用的,在以下条件下,我如何才能使其只能从我的闪存中调用:

  • .swf 由同一个 asp.net 应用程序托管
  • 有两个域可以访问同一个应用程序(我之前遇到过跨域问题)。
  • 不能使用 SSL。
  • Web 服务必须由 .swf 文件使用。

任何帮助或代码将不胜感激。

【问题讨论】:

    标签: asp.net web-services security actionscript


    【解决方案1】:

    如果你想使用 ASP.NET webapplication 而不是 webservice ,我有一个适用于我的项目的解决方案。

    您可以使用LoadVars' and 'sendAndLoad 将变量从闪存发送到您的 ASP.NET 页面。然后可以使用Request.Form 获取.NET 网页中的值。现在,由于您拥有从 Flash 到 .NET 网页的所有变量,请执行您需要的任何处理(Ado.NET 或向用户发送邮件)

    这里有一个sample 可以帮助您入门,虽然它是在 ASP 中,但可以在 ASP.NET 中轻松使用。

    但是,如果您尝试在 Flash 中使用 webService 连接器,但不确定并且不明白为什么要使用 webservice 而我们可以使用 webapp?

    Crossdomain.xml(策略文件)在这里非常重要。

    编辑
    要将数据从闪存发送到 Web 服务,我们可以使用以下方法。

    var wsConn:WebServiceConnector = new WebServiceConnector();
    wsConn.addEventListener("status",fault);
    wsConn.addEventListener("result",res);
    wsConn.multipleSimultaneousAllowed = true;
    //The following WSDL has been deployed locally. Most cases you will have another URL
    wsConn.WSDLURL = "http://localhost/flightstatus/FlightHistoryService.wsdl";
    //Method you need to call
    wsConn.operation = "FlightHistoryGetHistoryOperation";
    //Will Send the params as an array to the Webservice
    wsConn.params = [flightHistoryRequest];
    //wsConn.suppressInvalidCalls = true;
      wsConn.trigger();
    

    完整参考请参考我Blog上的文章。

    【讨论】:

    • 整个游戏都在 Flash 中,为了将分数保存在数据库中,必须调用我的 as.net 应用程序中的 Web 服务。或者有没有其他方法可以安全地将数据发送到我的 asp.net 应用程序?
    • @Carlos Muñoz,您不需要网络服务。只需在您的 .CS 文件中(如果您使用 C# 编写)加载 Flash 变量,然后将它们保存到数据库中
    • 通过 POST 向网页发送参数不是远程安全的。不过,Web 服务也存在同样的弱点。
    • 同意,SSL 不是一个选项。如果您编写编码和解码,则会增加性能开销。
    • 这里的性能开销没有意义,重要的问题是从flash向c# webservice发送数据,并确保只有flash可以调用它。
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2012-09-10
    相关资源
    最近更新 更多