安全的在线游戏http get / post请求(如何避免重复发送相同的http-req)

时间:2010-08-16 12:15:40

标签: iphone objective-c http https httpwebrequest

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可以使用用于防止网站上的CSRF攻击的变体(我假设您正在控制服务器):

  • 让客户向http://gameserver.example/userId/givebonus发出GET请求。
    • 在服务器端生成一个UUID或类似的东西,存储在服务器上的一个数据库中,与某个“挂起”表中的该用户ID相关联。
    • 对此GET的响应应包含此UUID(如HTML表单中的隐藏令牌)
  • 让客户端发送POST请求,其中包含该UUID和您要提供的点数。
    • 在服务器上,检查来自数据库的UUID,如果之前没有完成,则仅执行增量。在交易期间将其从待处理列表中删除。

(有一些变种,你可以签署令牌,但我认为一般来说很难对新的UUID进行重播。)

作为旁注,我建议不要在http://gameserver.com/userId/givebonus/100上通过GET请求进行增量。 GET是一种安全的方法,即您可以根据需要多次执行它,它不会影响服务器状态;这是通过HTTP和REST的设计。显然,如果你对GET采取行动,这将导致问题。我建议将POST用于具有副作用的操作,然后将金额和操作名称放在请求实体中。

(当然,将HTTPS与其结合使用并没有什么害处。)