保护纯粹的客户端骨干应用程序

时间:2013-04-05 00:13:34

标签: javascript security backbone.js client-side

所以说我要实现拼字游戏,我希望它是100%的客户端,即骨干处理所有游戏逻辑。是否有可能保护这样的解决方案,以便用户无法欺骗游戏移动?

这可能吗?

2 个答案:

答案 0 :(得分:3)

我认为,即使在(几乎)所有客户端解决方案

中,服务器端也必须保留一些内容
  1. 安全性 - 您必须在客户端以外进行某种授权和身份验证
  2. 验证 - 您永远不会信任用户生成的内容,并且在骨干同步期间发送到服务器的JSON模型在某种程度上是用户生成的内容(因为任何人都可以打开控制台和搞乱你的模特并保存)
  3. 我知道像Firebase这样的解决方案处理#1非常好,但我不确定它们是否处理#2

    因此,在这种情况下,Sébastien的答案是一个很好的解决方案,而不是服务器验证,您可以让同行根据他们对游戏的表示来验证他们从其他同伴那里得到的是一个有效的移动。但是,你怎么知道谁是对的?多数人获胜?我没有看到避免某种服务器端状态的方法,即“主”并验证每次移动都是“有效”移动。

    这样做的一种方法是让服务器端在Node.js上运行,这样就可以避免在两个不同的地方重写验证逻辑。您无需在服务器端运行整个逻辑,只需运行验证部分。

    还有一些方法可以在服务器端运行整个Backbone应用程序(例如this approach),但我不确定这是否需要。

    您需要服务器端验证的其他几个原因:您如何知道用户正在保存什么?例如如果你没有大小限制,是什么阻止他们将整个盗版电子书数据库存储在你的应用程序中,如果你在服务器端没有验证,任何拥有控制台的人都可以在理论上推动任何事情。

答案 1 :(得分:2)

除非你为一个客户建立一种方式告诉另一个客户停止作弊,换句话说,在本地验证每一步,否则这是不可能的。然而,这有一个相反的问题,即允许作弊者阻止对手的每一步行动。

你可以通过让第三个人与客户一起扩展这一点,并间接观察"游戏,并提供第三个观点的动作。如果三分之二的人认为移动是合法的,那么它就会通过。如果你有大量的骗子/人修改脚本,这只会破坏。

我认为这将是您唯一的解决方案之一,因为如果应用程序完全是客户端,您可以在代码中认为安全或不可破解。我认为,您需要依赖于对等验证,而不是在代码中构建检查。