
Passing untampered data from Flash app to server?我正在寻找在运行Flash的客户端和服务器之间传递数据的安全方法。 有问题的数据将由Flash应用程序生成,在这种情况下,这是您完成游戏后的得分。 我想验证服务器上的数据是否未被篡改。 有什么好的方法可以做到这一点? 一种简单的方法是对数据执行某些操作(例如哈希),并将哈希值与数据一起传递回服务器。 但是,这很容易被有权访问客户端源代码的人破解。 编辑:我意识到没有什么是无法破解的,但是我想使其尽可能地困难。 我认为@jcnnghm的解决方案是使用公钥加密数据,并可以选择对游戏日志进行完整性检查和/或重新计算。 SSL加密也是一个好主意,因为这会使解密发送回服务器的内容变得更加困难。 用存储在二进制文件中的公共密钥加密数据。这将增加攻击的进入壁垒。除此之外,当数据到达服务器时,还要进行完整性检查。这可能很简单,例如计算每个游戏时间单位可以实际赚取的最大积分数,或者将游戏日志发送回服务器以确保计分正确。 不管您做什么,都不会完全证明其不受黑客攻击,但这将停止一切,除非是最坚定的。 更新:@mark:Flash本身支持SSL。 在不受信任的平台上运行的代码能否保持其完整性?不,几十年来破坏性的复制保护方案使我推测这是不可能的。在受信任的沙箱中运行的反向恶意代码是可行的,但是您可以做的最好的事情是使人们作弊变得不便。 在http://code.google.com/p/as3crypto/上查看AS3Crypto软件包。我没有尝试过,但是此软件包声称(部分)支持TLS 1.0协议。
TLS将在Flash应用程序和服务器之间提供安全的隧道。
@jcnnghm 我同意给出的答案是黑客证明。因为一旦您可以阅读它,就可以对其进行操作/复制并对其进行反编译。 我一直在计划的另一种方法是生成唯一的密钥pr。玩家会话(包括某种时间/日期作为盐值)。 然后遍历整个应用程序,可能会定期提交/传输状态评分并获得新的有效密钥。如果此同步失败,则中断整个会话。 不利的一面可能是太多同时进行的玩家降低了服务器的回复速度,从而导致"假超时" +使游戏服务器无法进行DoS攻击。 但是在用户进行会话时更新"会话密钥"的操作会要求额外的会话管理,但是如果这样做会使作弊者更难一点,我一定会尝试的:o) 另一方面,"无"是黑客证明,因此,不管您想到的解决方案多么聪明,都不要100%相信它。 最后要注意的是将您的应用程序划分为模块/级别等,这样,仅通过启动它就不会访问所有代码。 目前,我的计划是建立一个大型的多层次世界,客户端/播放器将仅将文件附加到播放器所驻留的部分。 希望这对您的想法有用。 只要人们可以获取可执行文件-除非您希望在锁定的信息亭中运行游戏,否则情况总是如此-尚无完全安全的方法。 音乐和电影行业在DRM上花费了数千万美元,这在几天/几周内就被家庭业余爱好者破解了。如果他们不能保护自己的东西... |