我正在使用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变量......
您的帮助受到高度尊重和赞赏。
拉米
答案 0 :(得分:2)
唔...
我目前使用的东西非常相似(我正在开发一个MMORPG ......) - 我决定我需要预先加载游戏的内容,这样玩家就不必等待太多了。不幸的是 - 这些文件很容易浏览甚至反编译。
因此我制作了一个需要密码的自定义压缩+加密组合。此密码由服务器在需要时发送。
但是,在您的情况下,这不是最好的事情。 ByteArray并不是什么难以打破 - 实际上它会发送原始字节数据。除非你加密它(+1)。
另一件好事是标记化请求(+1)。即在PHP中,您生成一个“令牌”并将其写入令牌列表文件。令牌将类似于32个字母数字。此令牌也将传递给请求的SWF对象/页面,该对象/页面将立即在请求中使用它。该请求仅适用于有效令牌,即记录在令牌列表中的令牌。使用时,会立即将其删除。此外,每个令牌可能有时间限制。喜欢15或20秒。如果当时未使用它,请将其删除。如果超出时间限制,则需要重新加载用户端(如果加载太长)(尽管不是手动的 - 可以是某个脚本,或者iFrame只重新加载SWF)。
编辑:问题的作者提出了不同的要求 - 他的目的显然是要使加载程序应用程序仅请求可访问/可加载SWF文件。没有其他的。所以:
我担心这是一件很难的事情,但是......真的不可能做出不可能破解/入侵的东西。幸运的是,在网络中(尽管它们经常被攻击)或互联网更容易。您不能制作只能由您的应用程序加载的内容。如果您考虑它 - 甚至在逻辑上都是不可能的 - 在这两种情况下(用户请求和应用程序请求),用户计算机请求一个文件,并且很容易跟踪该请求并复制它或简单地拦截它。如果前两个中的任何一个不起作用,将使用SWF的反编译。一点点反对所有可能性:
A) 跟踪和复制
这可以通过FF上的Firebug等工具轻松实现,也可以在Safari上使用同样优秀的(真正的)Inspector。有了这些,很容易看到请求的内容,标题和响应(幸运的是,无法下载所请求的文件 - 只要它不是html或纯文本MIME就不会记录),还有响应标题。
在代码中混淆请求URL是没有用的,如果它最终会在其中一个工具的控制台中显示为请求。解决方案是:
B) 拦截
这是一个更高级别的攻击 - 但如果攻击者技术熟练且拥有一些资源,那就不那么难了。基本上这就是拥有一个类似的代理(因此资源 - 需要启用套接字的服务器,我自己拥有:D),他将用它来连接浏览器。然而,代理不仅会转发内容,而且会同时记录内容。打击:
C) 反编译
这甚至都不难做到 - SWF反编译器现在不是什么新东西,并且攻击者可以免费获得应用程序中的任何代码。即使您使用不同的协议,攻击者也可以通过更少或更多的努力闯入它。解决方案:
无 - 你可以让攻击者更加困难 - 混淆你的代码,拥有大量代码(如果你真的想要安全性......混乱可能只是做你的朋友),对实际代码使用跨客户端跨服务器请求 - 加载代码的动态加载的辅助SWF ......