SWF到PHP脚本的bytearray

时间:2010-11-07 09:31:04

标签: php flex bytearray amfphp

我正在使用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变量......

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

拉​​米

1 个答案:

答案 0 :(得分: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并在浏览器中请求它 - 但是那里的连接将是自动“连接:关闭”,在服务器端代码中检查并仅接受保持活动(或“特殊”)请求
  3. 使用与HTTP不同的协议 - 遗憾的是,这涉及服务器端套接字功能,用于在不同于HTTP 80的端口上进行通信...大多数服务器提供商不允许用户执行此操作,但如果可以 - 并且需要安全性 - 请执行此操作它 - 不使用任何已知的协议,而是适合您需要的东西 - 毕竟,您可以控制服务器端和客户端,因此无论如何都可以进行通信
  4. B) 拦截

    这是一个更高级别的攻击 - 但如果攻击者技术熟练且拥有一些资源,那就不那么难了。基本上这就是拥有一个类似的代理(因此资源 - 需要启用套接字的服务器,我自己拥有:D),他将用它来连接浏览器。然而,代理不仅会转发内容,而且会同时记录内容。打击:

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

      这甚至都不难做到 - SWF反编译器现在不是什么新东西,并且攻击者可以免费获得应用程序中的任何代码。即使您使用不同的协议,攻击者也可以通过更少或更多的努力闯入它。解决方案:

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