【问题标题】:Prevent cheating in Rails/html5 game App (Rails 3.2/html5/javascript)防止在 Rails/html5 游戏应用中作弊 (Rails 3.2/html5/javascript)
【发布时间】:2014-02-05 20:08:53
【问题描述】:

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

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

我想要的是:

1- 防止玩家作弊/窃取奖金(他赢得的奖品)

2- 防止球员在他拥有的 nb 球上作弊

由于一个用户可以赢得多个奖品并且奖品可以属于多个用户,我有一个 many_to_many 关系:我为此使用一个表格/模型 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-一样作弊吗?

【问题讨论】:

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


    【解决方案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)执行相同的操作。

    edit - 刚刚修正了我使用 offer_code 而不是 url_code 的错字。

    【讨论】:

    • 没问题!希望它对您或类似的人有所帮助。
    【解决方案2】:

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

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

    编辑:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2022-10-15
      • 1970-01-01
      • 2012-10-17
      • 2012-01-06
      相关资源
      最近更新 更多