2011-01-14 9 views
4

私はコースワーク用の小さなゲームを開発しています。私が決定した拡張はオンラインスコアボードです。私が思ったように、私のコースのいくつかの人々がスコアボードをハックして、自分のスコアを提出する方法を考え出しました。JavaからのURLへの投稿データを保護するための最良の方法

現在のスコアの提出方法にはいくつか問題があることは知っていますが、ここにはあります。ゲームはスコアを生成し、その後、選手ID、スコア、およびパスワードのオプションでURL上でHTTP GETを行います。

これは、パスワードのデータを取得するのが難しいため、これをPOSTに変更することがあります。また、私はHTTPS上で実行することを検討しています(これはJavaでもっと難しいかどうかわかりませんが)。残念ながら、これは人々がJavaコードを逆コンパイルすることによってパスワードを見つけた主な方法を止めるものではありません。

ハッキングを防ぐ最良の方法はわかりません。それほど重要ではありませんが、コードをマークすると、スパムの負荷がかからないようにセキュリティを確保するのが良いでしょう。

コードを難読化したり、プロセス全体を保護する方法について、あなたの提案は何ですか?

+0

POSTの問題は何ですか?私は、POSTはもっとスーツになると思います! –

答えて

2

匿名トラッキングからユーザートラッキングに変更することができます。これは偽装を防止するものではありませんが、追跡可能にします。

基本的なプロトコルは、スコアボードの変更がセッションキーを使用して署名または暗号化されていることがあります。セッションキーは、プレーヤー自身のログオン時に作成されます。ここでは、適切な認証システムを使用して作業できます。

今、少なくともあなたは変更が行われていると、あなたの学生を非難することができます占めているから知っている...

+0

+1いい考えですあなたがクライアントを信頼することに決めたら(少なくともサーバー側をすべて行うのではなく)、少なくともあなたが信用している人を知りたい... – sleske

+0

これは良いアイデアです。アイデアをありがとう。 – danpalmer

7

あなたのアプローチは単純に機能しません。セキュリティを確保する必要がある場合は、クライアント上で実行することはできません。

代わりに、ゲーム全体をサーバー上で実行する必要があり、ユーザーは移動のみを送信できます。そうすれば、あなたは動きを検証することができます(プレイヤーは不正な状態を作成することはできません)。正しいスコアを計算できます。

他のすべては常にハッキングできます。データを暗号化しないと、ネットワークスニファを使用してハッキングする可能性があります。 HTTPSを使用する場合、ハッカーはプロキシを使用してデータをデコードできます(man in the middle attack)。

+2

中間者攻撃は必要ありません。ユーザーはすでにクライアントを所有しています。彼らは単にクライアントをハッキングして入札をすることができます... – sleske

+1

私が言ったことは、あなたがクライアントをハックまたはデコンパイルする必要がないということです。プロキシをインストールし、SSL証明書をインストールしてクライアント用に設定するだけです。こうすることで、クライアントは暗号化されたデータをプロキシに送信し、プロキシはそれをデコードして再エンコードします。スクリプトキディレベル。 –

+0

私は、サーバが最も安全であることをすべて知る必要があることを知っています。しかし、この質問のポイントはもっとありました。最低限の労力で最も効果的なものは何ですか。私はそれが怠け者に聞こえるのは分かっていますが、それは授業の締め切りのためです。シンプルな攻撃の大部分をブロックするために私ができる簡単なことがあるかどうか疑問に思っていました。とにかく答えてくれてありがとう、ミドルアタックの人は面白かったです。 – danpalmer

2

難読化はあなたを助けにはなりません。 ハッカーにとっては難しくなりますが、確かに可能です。

プロセス全体を(少なくともある程度は)確保するために、クライアントにゲームロジックコードを使用しないでください。クライアントは、サーバーにゲームコマンドを送信する必要があります。コマンドを受信した後、サーバは、ユーザが与えられたコマンドを実行できるかどうかをチェックする必要があります。

たとえば、同僚が 'set jeff score 9999'コマンドを送信した場合でも、サーバーはjeffが実際に彼に9999ポイントを与えたゲームを行ったかどうかをチェックし、そうでない場合はエラーメッセージクライアント上で

一般的なルールは次のとおりです。クライアント上に何かがある場合、クライアントはそれを変更できます。ほとんどの人は、クライアントが無益に変更することを困難にする試みをしています。

+0

残念ながら、コース全体は地元のゲームだけでした。拡張(わずか20%の価値)は基本的な追加機能を追加することでした。ロジックをサーバーに置くことは、比較的少数のマークに対して多くの作業が行われていて、サーバーはJavaで実装されていませんでした。これはテスト対象のものでした。私は、しかし、将来のプロジェクトのためにこのアドバイスをすべてメモしています。 – danpalmer

関連する問題