我想知道在下列情况下是否可以防止作弊
我想要的是:
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那样作弊 - ?
答案 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)
现在至少可以做两件事:
POST
请求 - 仍有可能作弊,但需要更多工作Win
- 并在赢得游戏后创建此类的对象。然后在发出请求(第1点)后,您可以检查此对象是否存在。修改强>
抱歉,您已经提到了Winning
课程。在赢得游戏后创建该类的对象,然后检查用户是否赢得游戏(如果该表包含用户和游戏的记录)。
您还应该在游戏中存储用户的镜头,并使用独特的验证来禁止例如在一个游戏中两次拍摄。