0

我的网站上有一个 Flash 应用程序,它调用服务器上的某些 php 脚本。

例如,我有一个脚本可以获取我的 Flash 游戏用户拥有的所有项目。该脚本返回由返回代码和返回消息组成的 JSON 编码响应(在这种情况下,消息是一个项目数组)。我从 actionscript 调用 php 脚本,如下所示:

var urlReq:URLRequest = new URLRequest("mysite.com/getItems.php");
urlReq.method = URLRequestMethod.GET;

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, onResponse);
loader.addEventListener(IOErrorEvent.IO_ERROR, networkError);
loader.load(urlReq);        

然而,人们也可以轻松地mysite.com/getItems.php在他们的浏览器中导航到,只要他们有一个活动的会话,他们就会看到浏览器中的 JSON 响应。考虑到它显示了我的下划线传输协议的格式,这让我相当不舒服。

是否有任何方法可以“隐藏”我的 php 脚本以防止直接浏览器访问,同时在从 actionscript 调用时仍然可以使用该脚本。

4

2 回答 2

3

简而言之,没有。如果在用户计算机上运行的一个程序可以访问您站点的 API,那么另一个程序也可以。您可以尝试使用加密或 cookie/密钥技术,但所有这些都可以被足够敬业的人破解。

  • 可以通过反汇编/反编译 Flash 二进制文件来破坏加密。
  • Cookie/密钥技术通常可以通过使用数据包嗅探器(例如Wireshark )很容易地被破解。(使用 HTTPS 可能会使这种方法无效,但反汇编 Flash 二进制文件足以解决使用 HTTPS 的问题。)

我会考虑拥有一个 API,即使是一个未记录的 API,对玩你的游戏的编码类型相当有用。

于 2012-10-03T18:37:06.220 回答
1

一个简单的方法是在您的应用程序中包含一个键作为请求的 GET 参数。然后在 php 页面中,如果 的值$_GET['key']有效,则仅输出 JSON。

监视您应用程序流量的人将能够提取它并在他们的浏览器中使用它以进行直接访问,但是足够高级的用户可能已经在他们的应用程序流量视图中看到了您的 JSON。

您可以进一步扩展并检查通过get_browser()or报告给 PHP 的各种客户端信息,$_SERVER['HTTP_USER_AGENT']但同样,熟练的用户将能够克服此检查。

于 2012-10-03T18:35:54.980 回答