1

我正在使用 AMFPHP 将内容从我的服务器流式传输到我的 Flex 应用程序,因为 Flash 是一种客户端技术,我想让人们更难获取受保护的文件,所以我创建了一个将 swf 文件流式传输到另一个 Flash 播放器的系统,我已经完成了对 URL 流的所有测试,现在我想将 swf 文件作为 bytearray 传递给播放器 .. 因为我认为它更安全,更难破解,将来我什至可能会自己做一些加密对字节和位变得更加熟悉了..无论如何我的方法是最好的吗?(SWF 到 ByteArray?)还是有更好的?如果 bytearray 方法是最好的,我在以正确格式输出 swf 文件时遇到问题,我使用的是一种非常原始的方法..

        $file = file_get_contents($file); 
        $byteArr = str_split($file); 
        $byteArr = array_map('ord', $byteArr);
        $return['fileBin']->data = $byteArr;

我返回 $return 变量...

您的帮助受到高度尊重和赞赏。

拉米

4

1 回答 1

2

嗯……

我目前使用非常相似的东西(我正在开发 MMORPG ......) - 我决定我需要预加载游戏的内容,这样玩家就不必等待太多。不幸的是 - 这些文件很容易浏览甚至反编译。

因此,我制作了一个需要密码的自定义压缩+加密组合。此密码由服务器在需要时发送。

但是,在您的情况下,这不是最好的做法。ByteArray 并不难破解——本质上它会发送原始字节数据。当然,除非您对其进行加密(+1)。

另一件好事是将请求标记化(+1)。即在 PHP 中,您生成一个“令牌”并将其写入令牌列表文件。令牌将类似于 32 个字母数字。这个令牌也将被传递给请求的 SWF 对象/页面,它会立即在请求中使用它。该请求仅适用于有效令牌,即记录在令牌列表中的令牌。当它被使用时,它会立即被移除。此外,每个令牌可能有时间限制。比如 15 或 20 秒。如果到那时不使用,请将其删除。如果超出时间限制,则需要重新加载用户端(如果加载时间过长)(尽管不是手动 - 可以是一些脚本,或者 iFrame 仅重新加载 SWF)。

编辑:问题的作者提出了不同的要求 - 他的目的显然是使请求的 SWF 文件只能由加载器应用程序访问/加载。没有其他的。所以:

恐怕这是一件很难的事情,但是...实际上不可能使无法破解/入侵的东西成为可能。幸运的是,在网络(尽管它们更经常受到攻击)或互联网中更容易做到这一点。您不能制作只能由您的应用程序加载的东西。如果您考虑一下 - 在这两种情况下(用户请求和应用程序请求),用户计算机都请求一个文件,并且很容易跟踪该请求并复制它或简单地拦截它,这在这两种情况下(用户请求和应用程序请求)都是不可能的。如果前两者中的任何一个不起作用,则将使用 SWF 的反编译。关于应对所有可能性的一点点:

A)跟踪和复制

使用 FF 上的 Firebug 或 Safari 上同样优秀(真正)的 Inspector 等工具,这很容易实现。有了这些,很容易看到请求的内容、标题和响应(幸运的是,无法下载请求的文件 - 只要它不是 html 或纯文本 MIME,它就不会被记录),还有响应标题。

如果最终将在这些工具之一的控制台中显示为请求,则在代码中混淆请求 URL 是没有用的。解决方案是:

  1. 仅发出一次请求(如上所示 - 标记化)
  2. 为请求使用特殊的标头,例如“Connection: keep-alive”——这对普通攻击者来说变得更加困难,因为他们通常只会复制 URL 并在浏览器中请求它——但是那里的连接会自动出现“Connection” :关闭”,在服务器端代码中检查并仅接受保持活动(或您的“特殊”)请求
  3. 使用与 HTTP 不同的协议 - 不幸的是,这涉及服务器端套接字功能,用于在不同于 HTTP 80 的端口上进行通信......大多数服务器提供商不允许用户这样做,但如果你可以 - 并且想要安全 - 这样做 - 不要'不使用任何已知的协议,而是使用适合您需要的协议 - 毕竟,您控制服务器端和客户端,因此无论如何都可以进行通信

B)拦截

这是一个更高级别的攻击——但如果攻击者技术娴熟并且拥有一些资源,那么做起来并不难。从本质上讲,这涉及到一种代理(因此需要资源 - 需要启用套接字的服务器,我自己有:D),他将使用它来连接他的浏览器。然而,代理不仅转发内容,而且同时记录它。反击:

  1. 使用不同的协议
  2. 该协议的加密 - 因为即使记录了数据,也没关系 - 它不再只是 HTTP 标头后跟原始文件数据(标头很容易删除和“violá”) - 只有客户端应用程序知道如何使用这些数据

C)反编译

这甚至不难做到——SWF 反编译器现在已经不是什么新鲜事了,攻击者可以免费使用应用程序中的任何代码。即使您使用不同的协议,攻击者也可以通过或多或少的努力闯入它。解决方案:

- 你可以让攻击者更难 - 混淆你的代码,拥有很多(如果你真的想要安全......混乱可能只是你的朋友),使用跨客户端跨服务器请求来实际代码 - 加载代码的动态加载辅助 SWF...

于 2010-11-07T10:12:34.590 回答