JavaScriptゲームからサーバーへのHTTPデータの保護


8

私がJavaScriptゲームをやっていて、ユーザーがゲームとその結果を正常に完了した場合にゲームでサーバーを更新したいとします。

リクエストがJavaScriptゲームからのものであり、送信されたデータが改ざんされていないことを確認するにはどうすればよいですか。サーバーサイド言語としてPHPを使用しています。

100%フールプルーフになる戦略はないことを理解しています。実行する対策は絶対的な保護というよりも抑止力です。

編集時:(従来のMMOのように)各ユーザーのステップのサーバー検証を使用していないとします。ゲームはWebゲームまたは教育ゲーム(スペースインベーダーやリアルタイムゲームなど)の一部としてのミニゲームであり、これらのゲームのそれぞれにサーバー側コンポーネントを必要とするのは面倒です。

例:ゲームが完了すると、リクエストがサーバーに送信されます。AJAX

game_finished.php?user_id=1&outcome=success&score=88

ユーザーは、game_finished.phpにリクエストを送信することで、ゲームが正しく完了したと信じ込んでサーバーを「偽造」できます。これをどのようにもっと難しくすることができますか?

回答:


10

たとえば、スライディングブロックパズル

これは、サーバー側の検証が簡単な例です。ゲームが終了するまで、各ステップを確認する必要はありません。ムーブリスト全体を送信するだけで、サーバーはそれを再生して正しいことを確認します。

(編集:この答えのポイントは、簡単に検証できないものを見つけるまで、例を選ぶことではありません。むしろ、実際に作成しているゲームに戻って実際に見てみる必要があります-おそらく簡単に検証できます。または、小さな調整が必要なだけです。)


私はその例を考えていましたが、それは最良の例ではありません。では、スペースインベーダーとしましょう。質問を更新します。
Extrakun

2
ただし、スペースインベーダーの動きも完全に確定的です。ショット/ヒットの各ペアが発生するタイミングを記録し、その時間までの動きをシミュレーションし(これは単純な線形方程式です)、実際にヒットしたことを確認するだけです。

私はそれをじっくり考えた後、あなたが何を意味するかをようやく手に入れた。ありがとう
Extrakun

「完全に確定的」な側面への追加:ゲームでランダム性が必要な場合は、そのランダム性の特定のシードをクライアントに渡し、そのシードをサーバーに保存します。クライアントが確認のためにゲームプレイログを送信すると、サーバーはランダム性を伴う部分も再生できます。現地時間に依存するステップでも同じことが可能です。JavaScriptでこれを行う方法の例として、Undumundum.com)の保存および読み込みアルゴリズムを参照してください。
BerndBrot 2012

2

Warcraftの方法で行うことができます。Javascriptを使用してサーバーに移動コマンドを送信し、サーバーにロジックを処理させます。

これでも、ロボット(人間が実行できるよりも正確に高速で物事を動かすJavaScriptプログラム)を利用できるようになりますが、/ game_finished.phpトリックを利用できるようにすることと比べると、大きなステップです。


1

クライアントにスコアを計算させる場合、サーバーがゲームをリプレイして同じスコアを取得することを確認することで(指摘したように)スコアを検証する方法はありません。

ただし、数値スコアだけでは機能しないゲームを設計することもできます。たとえば、サーバー側のスクリプトはランダムな加算計算問題を生成でき、ユーザーが回答を送信すると、自分の回答を正しいものと比較し、サーバー側でスコアを付けることができます。

しかし、ゲームが複雑なものである場合(スペースインベーダーの例のように)、a)クライアントを信頼するか、b)サーバーにゲームを管理させる以外に、できることは多くありません。


-1

多くの方法がありますが、いずれも最終的に失敗します。いくつかのハッシュ値を追加するか、クエリごとに更新されるクエリキーを追加できます。

しかし、最も重要なことは、すべてのスーパーエンコーディング関数がソースコードとしてクライアントのブラウザーに送信されることです。それが問題です。少し難しくするには、Ajaxクエリによる関数sendを使用できます。これにより、URLでソースを利用できなくなります。関数は圧縮して送信する必要があり、場合によっては部分的に送信する必要があるため、すべてをコピーすることは困難です。このコードをhttp://jsbeautifier.org/のようなページでチェックして、コードを読みやすくした後、コードが理解しやすい場合もチェックします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.