嗯……
我目前使用非常相似的东西(我正在开发 MMORPG ......) - 我决定我需要预加载游戏的内容,这样玩家就不必等待太多。不幸的是 - 这些文件很容易浏览甚至反编译。
因此,我制作了一个需要密码的自定义压缩+加密组合。此密码由服务器在需要时发送。
但是,在您的情况下,这不是最好的做法。ByteArray 并不难破解——本质上它会发送原始字节数据。当然,除非您对其进行加密(+1)。
另一件好事是将请求标记化(+1)。即在 PHP 中,您生成一个“令牌”并将其写入令牌列表文件。令牌将类似于 32 个字母数字。这个令牌也将被传递给请求的 SWF 对象/页面,它会立即在请求中使用它。该请求仅适用于有效令牌,即记录在令牌列表中的令牌。当它被使用时,它会立即被移除。此外,每个令牌可能有时间限制。比如 15 或 20 秒。如果到那时不使用,请将其删除。如果超出时间限制,则需要重新加载用户端(如果加载时间过长)(尽管不是手动 - 可以是一些脚本,或者 iFrame 仅重新加载 SWF)。
编辑:问题的作者提出了不同的要求 - 他的目的显然是使请求的 SWF 文件只能由加载器应用程序访问/加载。没有其他的。所以:
恐怕这是一件很难的事情,但是...实际上不可能使无法破解/入侵的东西成为可能。幸运的是,在网络(尽管它们更经常受到攻击)或互联网中更容易做到这一点。您不能制作只能由您的应用程序加载的东西。如果您考虑一下 - 在这两种情况下(用户请求和应用程序请求),用户计算机都请求一个文件,并且很容易跟踪该请求并复制它或简单地拦截它,这在这两种情况下(用户请求和应用程序请求)都是不可能的。如果前两者中的任何一个不起作用,则将使用 SWF 的反编译。关于应对所有可能性的一点点:
A)跟踪和复制
使用 FF 上的 Firebug 或 Safari 上同样优秀(真正)的 Inspector 等工具,这很容易实现。有了这些,很容易看到请求的内容、标题和响应(幸运的是,无法下载请求的文件 - 只要它不是 html 或纯文本 MIME,它就不会被记录),还有响应标题。
如果最终将在这些工具之一的控制台中显示为请求,则在代码中混淆请求 URL 是没有用的。解决方案是:
- 仅发出一次请求(如上所示 - 标记化)
- 为请求使用特殊的标头,例如“Connection: keep-alive”——这对普通攻击者来说变得更加困难,因为他们通常只会复制 URL 并在浏览器中请求它——但是那里的连接会自动出现“Connection” :关闭”,在服务器端代码中检查并仅接受保持活动(或您的“特殊”)请求
- 使用与 HTTP 不同的协议 - 不幸的是,这涉及服务器端套接字功能,用于在不同于 HTTP 80 的端口上进行通信......大多数服务器提供商不允许用户这样做,但如果你可以 - 并且想要安全 - 这样做 - 不要'不使用任何已知的协议,而是使用适合您需要的协议 - 毕竟,您控制服务器端和客户端,因此无论如何都可以进行通信
B)拦截
这是一个更高级别的攻击——但如果攻击者技术娴熟并且拥有一些资源,那么做起来并不难。从本质上讲,这涉及到一种代理(因此需要资源 - 需要启用套接字的服务器,我自己有:D),他将使用它来连接他的浏览器。然而,代理不仅转发内容,而且同时记录它。反击:
- 使用不同的协议
- 该协议的加密 - 因为即使记录了数据,也没关系 - 它不再只是 HTTP 标头后跟原始文件数据(标头很容易删除和“violá”) - 只有客户端应用程序知道如何使用这些数据
C)反编译
这甚至不难做到——SWF 反编译器现在已经不是什么新鲜事了,攻击者可以免费使用应用程序中的任何代码。即使您使用不同的协议,攻击者也可以通过或多或少的努力闯入它。解决方案:
无- 你可以让攻击者更难 - 混淆你的代码,拥有很多(如果你真的想要安全......混乱可能只是你的朋友),使用跨客户端跨服务器请求来实际代码 - 加载代码的动态加载辅助 SWF...