防止在Rails / html5游戏App中作弊(Rails 3.2 / html5 / javascript)

我想知道在下列情况下是否可以防止作弊

  • 我有一个Ruby on Rails应用程序和一个Active Record数据库
  • 我有玩家(模型用户),玩游戏(模型游戏),还有奖品(模特奖)。

我想要的是:

1-防止玩家欺骗/黑客赢取奖金(他赢得的奖品)

2-防止玩家在他拥有的镜头中作弊

由于用户可以赢得多个奖品并且奖品可以属于多个用户,我有很多关系:我用这个表/模型奖金列出了每个用户在游戏中赢得的所有东西(用户有很多奖金和奖品)有很多奖金)

玩家有一定数量的镜头,比方说每个用户3个。

对于1-,基本上,我猜每次用户在游戏中赢得奖品时,我都会向服务器发送一个url:mygame / com /?winning_id = 1234; game_id = 3; user_id = 6; prize_id = 4,告诉id为6的用户在id为6的游戏中以id4赢得奖品

我不希望玩家能够欺骗那个。 我怎样才能做到这一点。 任何玩家都可以使用上面的url,并以这种方式向我的服务器发送消息/动作(post)告诉他他赢了吗? 这会让它变得容易欺骗吗?

我应该加密东西/url,并使我的服务器只能理解url/邮件吗?

对于2- (镜头),我想我应该每次都向服务器端发送动作并在服务器端计算分数,但仍然不能像1-那样欺骗?

除了使用上面的palainum答案中提到的post之外,如果需要,您可以在游戏中可以编辑和显示URL的任何位置添加字符串(而不是ID)。

背景 – 我的一个应用程序中遇到了类似的问题(如果URL被更改,人们可以推断/编辑数字和作弊)。 我克服它的方法是为URL中的项生成唯一代码。

为此,我将为Winning模型添加一个名为url_code的字符串属性,使其成为必需和可索引的:

  add_column :winning, string :url_code, :null => false, :index => true 

在你的模型中添加一个after_initialize回调:

 Class Winning validates :url_code, :uniqueness => true after_initialize :create_url_code def create_url_code self.url_code=SecureRandom.hex(4) if self.url_code.nil? end 

并且在使用ID的情况下将其用作参数是一个问题(在您的控制器中与此类似)……

 @winning = Winning.find_by_url_code(params[:id]) 

此外,您可以使用user.name作为friendly_id,为您的用户URL执行相同的操作(或者如果您需要在URL中显示每个URL)。

编辑 – 只修复了我有offer_code而不是url_code的拼写错误。

你现在至少可以做两件事:

  1. 发送POST请求 – 它仍然可以作弊,但它需要更多的工作
  2. 创建一个模型Win – 并在赢得游戏后创建该类的对象。 然后在发出请求(第1点)后,您可以检查此对象是否存在。

编辑:

对不起,您已经提到过Winning课程。 在赢得游戏后创建该类的对象,然后检查用户是否赢得了游戏(如果该表包含用户和游戏的记录)。

您还应该在游戏中存储用户的镜头,并使用独特的validation来禁止例如在一个游戏中两次拍摄。