HTML5ゲームからサーバーへのスコアの送信を保護するにはどうすればよいですか


13

バックエンドでは、Javaを使用しています。HTML5でゲームをしています。ユーザーが完了したら、Ajax呼び出しを送信して、スコアをデータベースに保存します。これで、誰かがFiddlerやfirebugなどのツールを簡単に使用して、このajaxリクエストを変更し、より良いスコアをサーバーに送信できるようになりました。ユーザーがスコアを操作できないようにするにはどうすればよいですか?

回答:


18

整数のスコアをサーバーに送信するだけではありません。スコアが現実的であることを確認するために使用できるゲーム統計のコレクションを送信します。または、スコアを計算するための事前共有キーを実装できます。ゲーム全体で増分スコアと統計を送信し、増加が妥当であることを確認できます。

しかし、私はそれについてあまり心配しません。上記の提案により、より困難になりますが、偽のスコアを送信することは不可能ではありません。ただし、ゲームを少し難しくするだけであれば、ゲームをプレイする大多数の人はそれをだまそうとすることに興味を持ちません。

ゲームとサーバーとの通信を許可する方法に注意してください。ゲームをハッキングのサーバーへのエントリポイントにしたくない場合。入力を常に検証し、クライアントを決して信頼しないようにしてください。


6
Programmers.stackexchange.com/questions/150127/…およびgamedev.stackexchange.com/questions/37392/…を参照して、「クライアントを信頼しない」を完了してください
-dievardump

@ Byte56は、難読化も暗号化も、プレイ中にゲームデータを変更するために使用されるデバッガーからコードを保護しません。クライアントでゲームプレイが発生する場合、この形式の不正行為を防ぐことは本質的に不可能です。Javascript対応ブラウザは、信頼できるコンピューティングデバイスではありません。
-MarkR

10

Byte56が言ったように:「クライアントを決して信用しない」、しかし:

クライアントを信頼することには代償
が伴います。サーバーですべてのゲームをプレイすると、インフラストラクチャのコストが大幅に増加します。

ほとんどのプレーヤーがチートせず
、少し時間が経つとトップのハイスコアが落ち着き、多くの変化を止めると仮定します

中間の方法があります。

ゲームを(クライアントで)記録します。
(非常に簡単なゲームタイプ(チェスなど)または少し複雑なゲームタイプ(マルチプレイヤーFPSなど)によって
異なりますが、常に実行可能です。)

プレイヤーがゲームを終了したら、スコアを送信するだけです。
スコアがトップの特定の範囲内にある場合(トップ1%またはトップ5など)
、プレーヤーに記録されたデータを要求
し、サーバーでそのゲームをリプレイします。
スコアが一致する場合、スコアを受け入れます。

この方法では、ほとんどの再生でサーバー側のリソースを追加する必要はありませんが
、トップスコアが有効であることを確認できます。


2
言い換えれば、トップスコア以外の不正行為を誰が気にしているのか(とにかくそれを行うのはなぜですか?)、検証する必要があるのはそれらだけです。
ジョッキング

4

それについて心配しないでください; クライアントを信頼する場合、すべての攻撃から保護することは本質的に不可能です。Ajaxリクエストを変更するためにFiddlerなどを使用しているユーザーがいない場合は、JSデバッガーを起動してゲームデータを変更し、1000のライフなどを与えたり、コードを変更したり、考えていない100のことを実行したりできます。

私は数年前にそのようなゲームを書きましたが、私の知る限りでは、だれもこのようにだましませんでした。スコア表にあなたの名前があることを除いて、賞はありませんでした。


4

ソーシャルリーダーボードを使用するなどして、不正行為に対する社会的動機を減らします(不正行為は、ほんの一握りの友人に見栄えを良くするだけで、誰にとっても損ないません)。

サーバーで確認します。Joel Poloneyは、Game Developer 2012 9月の「Scale Your Online Game」で優れたテクニックを書きました


2

チートプルーフのオンラインゲームを作成する場合は、サーバー上のすべてのゲームロジックを処理する必要があります。クライアント側で発生するすべてのことは、ユーザーが制御および操作できます。暗号化や難読化などの手法を試すことができますが、最終的には、十分に決定された誰かが回避できる、あいまいさによるセキュリティに過ぎません。

確かに、サーバー上で実行されるゲームは開発がはるかに複雑であり、サーバー側でより多くのリソースを必要とし、ネットワークレイテンシはゲームエクスペリエンスに有害です(特にテンポの速いゲームの場合)プレイヤーの不正行為を防ぎます。


それでさえ、すべての不正行為を防ぐことはできません-明らかな「ええ、合法的なものは膨大なポイントを獲得しました」ものだけです。以来何かがクライアント上で実行する必要があり、彼らは関係なく、いくつかのコントロールで終わります。少なくとも、すべてのクライアント、特にWebブラウザはスクリプト可能です。
cHao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.