我正在构建一个 WebApp,它通过 Web 服务连接到我的服务器。使用 webapp 的用户(没有登录)可以将他们的分数发送到服务器。
代码大部分是用 javscript 编写的,所以任何人都可以阅读。
我知道没有 100% 保证这样做的方法,我只是在寻找如何让用户尽可能难发送虚假分数的想法。
想法?10倍!
编辑
服务器端 Web 服务是托管在 IIS 上的 asmx (.net) Web 服务。我可以根据需要修改它。
我正在构建一个 WebApp,它通过 Web 服务连接到我的服务器。使用 webapp 的用户(没有登录)可以将他们的分数发送到服务器。
代码大部分是用 javscript 编写的,所以任何人都可以阅读。
我知道没有 100% 保证这样做的方法,我只是在寻找如何让用户尽可能难发送虚假分数的想法。
想法?10倍!
编辑
服务器端 Web 服务是托管在 IIS 上的 asmx (.net) Web 服务。我可以根据需要修改它。
我想说最好的办法是有一个 web 服务调用,在服务器端生成一个 guid,然后传回。这将成为您的会话令牌。它存储在数据库中或服务器上的缓存中
每个后续调用都需要将令牌传递回服务器,服务器会验证令牌。如果他们传递了错误的令牌,您就不会更新。
这只会确保调用来自正确的进程。他们将无法通过一个电话来欺骗条目
对于一个交互点数有限的进程(你好像在谈论一个游戏?),你可以记录每个用户交互并回放它以检查它是否在服务器端产生了一定的分数(或者是实时的)或稍后出现可疑分数)。
否则(这对于有太多交互点的实时动作游戏来说通常是不切实际的),你无能为力。您可以让游戏对其提交的信息进行数字签名……但鉴于您向客户端提供了包括签名密钥在内的完整代码,攻击者仍然很容易获得密钥并签署无效分数。
在这一点上,你让自己陷入了一场混淆军备竞赛——你能在多大程度上让客户端代码不可读且难以解开,以防止攻击者获取密钥?您永远无法赢得这场比赛,只能阻止临时攻击者。最终,您必须保护整个客户端进程不被更改,以阻止所有其他形式的作弊(例如,使用 Firebug 更改分数或生命等变量)。