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

时间:2014-02-05 20:08:53

标签: javascript ruby-on-rails ruby-on-rails-3 html5 multiplayer

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

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

我想要的是:

1-防止玩家欺骗/攻击奖金(他赢得的奖品)

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

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

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

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

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

我应该加密东西/网址并让我的服务器只能理解网址/邮件吗?

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

2 个答案:

答案 0 :(得分:1)

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

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

为此,我要将一个字符串属性添加到名为Winning的{​​{1}}模型中,使其成为必需且可索引的:

url_code
在您的模型中添加 add_column :winning, string :url_code, :null => false, :index => true 回调:

after_initialize

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

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

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

编辑 - 修复了一个拼写错误,其中我有offer_code而不是url_code。

答案 1 :(得分:0)

现在至少可以做两件事:

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

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

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