这里有几点需要注意。
首先,您的服务器对此类内容的请求应该是 POST,而不是 GET。只有 GET 请求应该是幂等的,不这样做实际上违反了 HTTP 规范。
其次,您在这里看到的是经典的客户信任问题。您必须信任客户端将分数或其他游戏间隔信息发送到服务器,但您不希望客户端发送非法数据。防止不允许的操作很容易 - 但在允许的操作中防止犯规数据的问题要大得多。
Ben S 对如何设计客户端和服务器之间的通信协议提出了一个很好的观点。允许将点值作为可信数据发送通常是个坏主意。最好表明发生了一个动作,并让服务器计算应该分配多少点,如果有的话。但有时你无法解决这个问题。考虑一个赛车游戏的场景。客户端必须发送用户的时间,并且不能将其抽象为诸如“completedLevelFour”之类的其他调用。那你现在怎么办?
Ahmet 和 Dean 建议的令牌方法是合理的 - 但它并不完美。首先,令牌仍然必须传输到客户端,这意味着它可以被潜在的攻击者发现并被恶意使用。另外,如果你的游戏 API 需要是无状态的怎么办?这意味着基于会话的令牌身份验证已过时。现在你进入了客户信任问题的深层、黑暗的肠子。
您几乎无法做到 100% 万无一失。但是你可以让作弊变得非常不方便。考虑 Facebook 的安全模型(每个 API 请求都经过签名)。这非常好,并且需要攻击者真正深入研究您的客户端代码,然后才能弄清楚如何欺骗请求。
另一种方法是服务器重放。就像赛车游戏一样,不仅仅是将“时间”值发送到服务器,还具有记录时间并将其全部发送的检查点。为每个间隔建立现实的最小值,并在服务器上验证所有这些数据都在既定范围内。
祝你好运!