3

さて、この質問は非常に広範囲であるため、事前にお詫び申し上げます。

基本的に、私は以下を含むシステムを開発しています:

  1. ユーザーがアカウントを登録できる Web サイト。このプロセスにより、サーバー上にそのアカウントの新しいデータベースが作成されます。
  2. Java で記述されたクライアント側の外部アプリケーション。これは、ユーザーにとって有用な操作を実行するために、データベース内のデータにアクセスします。
  3. 最初のポイントで作成されたデータベース自体。

私の質問は、データベースを安全に保つために実装する必要があるセキュリティ対策と、データを安全に転送する方法についてです。

私の懸念は次のとおりです。

  1. MySQL データベースは実際にどのように保護されていますか? アカウント登録時にデータベースを作成する場合、そのデータベースにパスワードを設定する必要がありますか? これはデータベースを暗号化しますか? これは、誰かがデータにアクセスするのを防ぐのに十分ですか?
  2. Java は非常に簡単に逆コンパイルできます。アカウント データベースのログイン データをマスター データベースに保存すると仮定すると、そのデータベースを保護し、そのデータベースに接続するための詳細をハード コーディングする必要がない方法でアプリケーションから接続するにはどうすればよいでしょうか。アプリケーションで。アプリケーションの実行時にそのような変数を取得するために誰かがメモリダンプを実行するだけでよいため、これはネイティブコードにコンパイルされる言語でも問題になるに違いないと思います(私は思います)。
  3. サーバーからクライアントにデータを送受信するとき、またはその逆のときに、誰かがネットワークの盗聴やデータの取得を防ぐにはどうすればよいですか (これがログイン資格情報であろうと、データベースからの他のデータであろうと)。これがSSLの目的だと思いますが、それだけで十分ですか?

これらの質問に対する考えられる答えは、Javascript と MySQL データベースの間で PHP を使用するのとほぼ同じ方法で、Java クライアント側アプリケーションとデータベースの間で仲介者サービスを使用することです (ただし、この場合 PHP は必要です)。 . この仲介者サービスには、マスターデータベースなどのログイン資格情報が含まれ、不正アクセスを防止するための独自の方法が含まれると思います。これが正しい場合、そのようなサービスを設定するにはどうすればよいですか? Java アプリケーションから PHP スクリプトを使用してデータを転送することはできますか?

私の質問が理にかなっていて、あいまいすぎないことを願っています。お時間をいただきありがとうございます。

4

3 に答える 3

4

MySQL データベースは実際にどのように保護されていますか? アカウント登録時にデータベースを作成する場合、そのデータベースにパスワードを設定する必要がありますか? これはデータベースを暗号化しますか? これは、誰かがデータにアクセスするのを防ぐのに十分ですか?

  1. アカウント名とパスワードを、さまざまなユーザーに「付与」された特定のデータベースに対するさまざまなアクセス権とともに使用します。

  2. パスワードは、データベースではなく、ユーザー アカウントに関連付けられています。

  3. MySQL データベースは暗号化されていません。

  4. はい...ただし、信頼できない人がデータベース自体またはデータベースをホストするシステムの管理者の制御を取得できる場合、すべての賭けはオフです.

Java は非常に簡単に逆コンパイルできます。アカウント データベースのログ データをマスター データベースに保存すると仮定すると、そのデータベースを保護し、そのデータベースに接続するための詳細をハード コーディングする必要がない方法でアプリケーションから接続するにはどうすればよいでしょうか。アプリケーションで。

一般的なアプローチは、接続の詳細やアカウント資格情報を、アプリケーションが起動時にロードするプロパティ ファイルに入れることです。ただし、本当の問題は、信頼されていないマシンで実行されているアプリケーションによるデータベースの更新を許可したいということだと思います。それに対するより賢明な解決策は、適切に保護されたマシンで信頼できるサービスを実行し、信頼できないマシンがデータベースと直接ではなく、信頼できるサービスと通信するようにすることです。

アプリケーションの実行時にそのような変数を取得するために誰かがメモリダンプを実行するだけでよいため、これはネイティブコードにコンパイルされる言語でも問題になるに違いないと思います (私は思います)。

それは正しいです。

サーバーからクライアントにデータを送受信するとき、またはその逆に、誰かがネットワークの盗聴やデータの取得を防ぐにはどうすればよいですか (これがログイン資格情報であろうと、データベースからの他のデータであろうと)。これがSSLの目的だと思いますが、それだけで十分ですか?

SSL は、ネットワーク経由で送信されるデータ (または資格情報) を保護するのに十分です。

man-in-the-middle 攻撃の状況は、確かに Web ブラウザーに関しては不透明であり、信頼されたルートが本当に信頼されるべきかどうかは不明です。しかし、読んだ内容を正しく理解していれば、MITM の影響を受けない SSL を使用する方法があります。基本的に、すべての参加者 (クライアント、サーバー) に対して個別の SSL 証明書を生成し、帯域外配布メカニズムを使用してそれらをすべてに配布する必要があります。つまり、インターネット経由ではありません。次に、既知の証明書を持つパーティからの SSL 接続のみを受け入れます。また、TLS 1.1 または 1.2 を使用していることを確認してください。

于 2012-12-10T13:16:21.980 に答える
2

いくつかの可能性が見えます -

  1. jBoss SX フレームワークの使用
  2. EJB の使用は、必要な抽象化レイヤーを提供するもう 1 つの方法です。
  3. JCA コンポーネントは仲介者コンポーネントで使用できます

最後に、SQL インジェクションは、sqlMAP などの利用可能なツールの一部を介してアクセスすることもできます。

于 2012-12-10T13:29:32.887 に答える
1

クライアント アプリケーションがデータベース認証情報を保存してはならないという想定は正しいです。これらの接続文字列を取得するために Java アプリケーションを逆コンパイルするのは非常に簡単です。

代わりに、あなたが理解していると思うように、アプリが必要とする情報を提供する Web サービスを公開する必要があります。これにはいくつかの方法があります。たとえば、REST インターフェースを記述して、クライアントがサーバーに対して HTTP 呼び出しを行い、JSON または XML 応答を受け取ることができます。また、クライアントがサーバー上でリモート メソッド呼び出しを行い、必要な情報を検索できるようにする Java RMI サーバーを作成することもできます。より具体的な質問や制約がなければ、どちらがより適切かについて実際にアドバイスすることはできません.

于 2012-12-10T13:13:45.217 に答える