2012-03-25 19 views
0

私は(私がプログラムした)サーバーと通話するクライアントプログラムを作成しています。私は自分自身のために私がサイコロを振りかける少しの試合をしていますし、サーバーもそうしています。高い数字が得られる人は誰でも勝ちます。しかし、私のコードでは、ユーザーがボタンを押したときにサーバーコマンドを送信し、サーバーは応答してロールバックしたものを返すので、GUIウィンドウに表示されます。しかし、私はこれを非常に安全な方法であると考えています。たとえば、人は単にjarファイルを逆コンパイルして、常に12のロールを出すようにすることができます。両方のロールが一緒になっている(ユーザーとサーバー)唯一の場所はユーザーの画面なので、ゲームを評価する必要がありますクライアントからは明らかにあまり安全ではありません。私は自分のゲームをより安全にしようとしており、2つのオプションが見つかりました。Javaコード、安全であること

  1. オブファスケータ

    • 誰かが非常に使いやすい1を知っている場合を除き

      、私は彼らがめったにGUI私が簡単にできる「ポップが付属していないとして、それらのいずれかを設定する方法を見つけ出すことはできません「
  2. に私の.jarファイルが.exeファイルへの結合、私は正直に時間を知らない

    • これは安全です。 2つのもの(主に明らかにしていないウイルスを作成するためのもの)を1つの.exeファイルに「バインド」できるプログラムがあります。 .jarを.exeにバインドすることはできますが、.exeファイルを.jarファイルに逆コンパイルして、.javaファイルに戻すことはできません。ところで

、他のセキュリティ問題は、それが(私が知っているし、クライアントのユーザーを望んでいない)私のIPアドレス

+0

ユーザーは常にサーバーのIPアドレスを知ることができますが、ネットワークトラフィックを調べることによって – Ragnar123

+0

ありがとう、私は推測すると、より多くの侵入からサーバーコマンドを維持するセキュリティのより多くのIPアドレスの問題を無視すると思います – k9b

+1

クライアント/サーバープログラミングのルール#1:**クライアントを信頼しないで**。どの言語でもクライアントを「安全」にすることはできません。任意の数のセキュリティを通した無駄な方法を試すことができますが、最終的な結果は同じになります。 –

答えて

6

からサーバに接続するには、クライアントの入力を信用しないことです。

本当に「安全」な方法は、サーバーにクライアント用のロールとロールの両方を生成させることだけです。

もちろん、ロールの比較の結果がユーザーが見ている以上の影響を与えない場合(言い換えれば、クライアントは誰が勝ったかを報告しません)、本当に、誰が気にしますか?私はいつも勝つためにソリティアにパッチを当てることができましたが、それは楽しいことではありません。

2

コードが誰かのコンピュータにある場合は、そのコードが既に侵害されて悪用されていると考えるべきです。クラッカーと開発者の間の競争では、クラッカーは必要なものすべてを持っているので、クラッカーは常に勝つ。 Jarファイルは(簡単に)デコンパイルして難読化することができます.exexは別々に選ぶことができ、極端なレベルでは、OSはあなたの背後にあるように変更することができます。

代わりに、あなたのアーキテクチャを再考する必要があります。本当ににサイコロを巻くクライアントが必要ですか?サーバーは両方ともロールバックできますか?

1

".exe"への難読化とコンパイルの両方を比較的簡単に無効にすることができます。ハッカー/クラッカー、アンチウイルスのセキュリティ専門家は毎日この種のことをしています。

信頼できないユーザーが管理できる任意のコンピュータで実行されているアプリケーションは、基本的には信頼できません。実際には、これはあなたの(ロックされファイアウォールされた)サーバルームにないものを意味します。

(別名:TPMに基づくシステムでさえ、TPMチップに対する攻撃が成功している可能性があるため、脆弱性があります。これは、アプリケーションレベルのコードを保護するためにTPMを使用できないため実用的ではありません。 OSレベルでは使用されていません... Windowsの次のバージョンではTPMのハードウェアが必要になると聞いていますが)

関連する問題