1

エクリプスを使ってゲームを作りました。サーバープログラムとクライアントプログラムがあります。クライアントは、ソケットを使用してサーバーと通信します。クライアントが起動すると、ユーザー名とパスワードがサーバーに送信されます。組み合わせが存在する場合、クライアントはサーバーと通信できます。クライアントは、ゲーム内の他の人のレベルを常に読み取り、常に自分のレベルを送信します。

私の質問: どうすればパスワードを保護できますか、それともすでに安全ですか? クライアントは、独自の Java プログラムを作成し、既存のユーザー名とパスワードを使用してサーバーと通信し、たとえば 100 レベルアップしたことを送信するだけではありません。はいの場合、これを解決する方法は?他に確保しなければならないものはありますか?

4

3 に答える 3

4

サーバー プログラムで機密状態を保持し、クライアントに現在の値を要求させます。次に、サーバーでそれを制御します。

誰かが有効な資格情報を持っている場合、そのコンテキスト内でプロトコルがユーザーに許可することは何でも実行できます。これは、クライアントによる意図しない操作が全体的な整合性に影響を与えるのを防ぐために、サーバー プログラムから制御する必要があるものです。

于 2013-01-20T10:25:50.787 に答える
1

サーバー駆動のマルチプレイヤーゲームの場合は、サーバーに復号化可能なレベルキーとクライアントが読み取り可能なレベル番号またはキーのみを返送するようサーバーに要求するようにクライアントアプリを設計できます。そして、次のレベル変更要求で、クライアントに、以前に受信したレベルキー(つまり、現在)と、クライアントのセッション状態を識別するために必要なその他のパラメーターを送信させます。

このようなサーバーのみの復号化可能なレベルキーでは、クライアントはそれを変更したり、ゲームレベルを急上昇させてリクエストしたりすることはできません。次に、サーバーは次のレベルのキーとその他の関連情報をクライアントに送り返し、続行します。

多くのアクティブなクライアントセッションが存在する可能性がありますが、それらを検証および認証するには、サーバーにそのようなサービスが存在する必要があります。

于 2013-01-20T12:04:20.303 に答える
1

... クライアントプログラムが私が作成したオリジナルのものかどうかを知ることはできますか?

いいえ、クライアント プログラムがインストールされて実行される実行プラットフォームを制御しない限り、できません。

しかし、ペッカが推奨するアプローチをとれば、問題ありません。具体的には、重要な状態とその状態で実行されるアクションがサーバー側で処理される場合、ユーザーがクライアントをハッキングしても問題にならないように実装できます。

ただし、実際には、多くのゲームのインタラクティブ性は、状態と UI の間の高速なやり取りに依存しています。状態を別のシステムに置くと、これを軽減できない限り、「ラグ」の問題が発生します。

于 2013-01-20T10:56:15.390 に答える