デスクトップアプリケーションを開発していますが、リモートMySQLデータベースサーバーに接続する必要があります。現在、接続に必要なすべての情報(サーバーIP、TCPポート、ユーザー名、パスワード、データベース名)を保存します。構成ファイル呼び出しapp_config.property
。
これは安全な方法ではないことを理解しています。このような安全なデータを維持するための最も安全で専門的な方法を知りたいのです。
私はJava 7.0で開発しました。私の意図は、Windows 7とUbuntu Linuxで実行することです。
テキストファイルに保存されたデータは、そのファイル自体を暗号化しない限り、クリア形式のままになります。
他の回答者が言ったように、MySQLデータベース自体に資格情報を保存する方が良いでしょう。パスワードをハッシュ化してソルト処理します(そして、コショウも使用しませんか?)
非常に良い答えのある便利なリンク:
編集:
あなたのコメントに従ってください:
.htaccess
ファイルで保護するなど)の推奨事項に従ってください。可能であれば、ユーザー名とパスワードを構成ファイルに保存しないでください。ユーザーにアプリケーションを開くときにユーザー名とパスワードを提供するよう依頼し、データベースにユーザーのログインを作成し、そのユーザーに最低限のアクセス許可のみを付与します。アプリケーションの実行に必要なdbテーブル。
これを行う安全な方法はありません。必要に応じて、難読化、非表示、または実行できますが、ユーザー/パスワードが構成ファイル内またはコード内にある場合は、セキュリティで保護されません。誰かが常にデータ/実行可能ファイルにアクセスしてユーザー/パスワードを取得できます。唯一の違いは、その情報を取得するのが難しいことです(ファイルを読み取るか、コードをリバースエンジニアリングする必要があります)。安全な唯一の方法は、ユーザーにそのデータを紹介させることです。
平均的なPHP Webアプリケーションで、Mysqlのログインをクリアテキストで保存します。もちろん、平均的なユーザーはこれを見ることができません。コードにアクセスできるユーザーのみです。
私が言おうとしているのは、これが別の方法で実行できれば、おそらくそうなるだろうということです。
データベースとやり取りするWebサービスをセットアップし、データベースへのアクセスと権限をより正確に制限することもできますが、それによって本当にセキュリティが向上するかどうかはわかりませんし、考える時間もありません。
テーブルごとのデータベース権限を、選択、更新、削除、挿入などの必要なものに制限できます。
コードを難読化することでこれはうまくいきます。純粋なテキストでは構成ファイルを使用しません。
ただし、構成ファイルが必要な場合は、Javaで暗号化されたファイルを使用できます。私自身も、AESおよびPPK(RSA)を使用していくつかの暗号化アプリケーションを作成しました。ファイルを暗号化するには、アプリケーションコードだけが知っているキーでファイルを暗号化するか、ハードウェアIDとソルトを使用して、異なるコンピューター間で構成ファイルを移動できないようにします。
バイトストリームを使用すると、必要な場合を除いて、ファイルを変更せずにその場で暗号化および復号化できます。
これは、この特定のシナリオに対する私の提案です。