web-dev-qa-db-ja.com

プログラムのソースコードでFTPアカウント情報を保護する方法

FTPサーバーにハイスコア情報を保存するゲームを書きました。ソースコードで、アカウント名とパスワードを含むftpリンクを書き出す必要があります。

例えば:

url = new URL("ftp://name:[email protected]/");

これはJavaです。クラスファイルでは、文字列はソースコードで記述されているとおりに保持されます。したがって、誰かがクラスファイルを読み取れた場合、この文字列 ftp:// name:[email protected]/ を見つけることができます。とにかくわずかにクラスファイルに入ります。

ユーザー名とパスワードを保護する適切な方法は何ですか?

編集

Javaで暗号化クラスを作成し、名前とパスワードを暗号化されたユーザー名とパスワードで暗号化器への呼び出しに置き換えました。例えば:

url = new URL("ftp://Crypter.crypt("q345uih34",3)+:+Crypter.crypt("nfk3iugr29o8",-2)[email protected]/");

これで十分でしょうか?難読化が最善の解決策であるかどうかはわかりませんでした。

10
Ryan Stull

このシナリオにはいくつかの攻撃経路があるため、パスワードを非表示にしても役に立たない:

  • 人々に渡すコードはすべて操作することができます。これは、攻撃者が自分のハイスコアを任意の値に設定できることを意味します
  • ftpは、それを使用する方法では暗号化されていないため、完全な通信は Wireshark などのネットワークスニファに表示されます。
  • 攻撃者はURLクラスのコンストラクターにブレークポイントを設定するだけです(非常に単純ですが、通常、新しいURL()への呼び出しが多いため、少し面倒です。
  • 攻撃者は ソースコードを逆コンパイル して「新しいURL」を検索できます。このメソッドはJava APIの一部であり、したがって難読化できないため、難読化は役に立ちません。ソースコードを理解できない場合は、デバッグ出力を追加したり、ブレークポイントをより適切な場所に配置したりできます。
  • 攻撃者はバイトコード拡張を使用して、ログメッセージをURLクラスのコンストラクターに追加できます

したがって、ftpパスワードをどこでどのように非表示にするかは重要ではありません。

唯一の良い解決策は、ハイスコア計算自体を行うサーバーを用意することです(この方法でもボットの問題があります)。少なくとも暗号化をサポートするプロトコル(https、sftp、ftps)を使用する必要があります。資格を知っている誰かが他のユーザーのハイスコアデータを破壊できないことを確認する必要があります。これは、ftps/sftp-serverでの新しいファイルの作成のみを許可する厳密なアクセス許可によって、またはデータを受け入れてそれ自体を保存するWebアプリケーションを使用することによって実行できます。

17

FTPはおそらくこれについて間違った方法です。これはクリアテキストプロトコルなので、プログラムでどれだけ難読化しても、スニファを持っている人はだれでも認証要求を傍受して資格情報を抽出できます。

8
john

キー/値のペアを$ postリクエストとしてサーバーに送信して、操作されないようにするための認証を行うことができないのはなぜですか?

3
niggles