繁体   English   中英

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

[英]Prevent cheating in Rails/html5 game App (Rails 3.2/html5/javascript)

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

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

我想要的是:

1-防止玩家欺骗/窃取奖金(他赢了的奖杯)

2-防止玩家欺骗自己的投篮次数

因为一个用户可以赢得多个奖品,并且奖品可以属于多个用户,所以我有很多对很多的关系:我为此使用了一个表格/模型Winnings,其中列出了每个用户在游戏中赢得的所有东西(一个用户有很多奖品和奖品有很多奖金)

玩家有一定的投篮次数,比方说每位使用者3次。

对于1-,基本上,我猜每次用户在游戏中赢得奖金时,我都会向服务器发送网址,例如:mygame / com /?winning_id = 1234; game_id = 3; user_id = 6; prize_id = 4,告诉服务器ID为6的用户在ID为6的游戏中赢得了ID4的奖励

我不希望玩家能够作弊。 我怎样才能做到这一点。 任何玩家都可以只使用上面的网址,然后以这种方式向我的服务器(帖子)发送消息/操作告诉他他赢了吗? 那会很容易骗人吗?

我是否应该加密内容/ 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中显示它)。

编辑 -只是修正了我有offer_code而不是url_code的错字。

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

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

编辑:

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

您还应该将用户的镜头存储在游戏中,并使用唯一的验证来禁止例如在一个游戏中射击两次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM