1

jdbc を使用して SQL データベースに接続する Java アプリケーションを作成しました。そのスイングアプリケーション。データベースに接続するためのコードは、プロジェクトのファイルの 1 つにあります。SQL サーバーへのユーザー名とパスワードは、そこにハードコーディングされています。

アプリケーションにパスワードを直接書き込まずに、サーバー (データベースを持つネットワーク上のコンピューターの 1 つ) に接続するための解決策が必要です。サーバー上のファイルから読み取る必要があります。

ここでも、アプリケーションでファイル名を指定する必要があるというセキュリティ上の問題が発生します。jar ファイルは簡単に逆コンパイルしてソース コードを取得できるため、誰でもファイル名を確認してアクセスできます。

このセキュリティ問題を解決するにはどうすればよいですか?

4

3 に答える 3

2

あなたの懸念は理解していますが、あなたが望むものを正確に達成する方法はありません. アプリケーションがデータベースに接続する必要がある場合は、アクセス資格情報を「認識」する必要があります。

「難読化」技術 (「パスワードを暗号化し、オンザフライで復号化する」または「パスワードを別の場所から引き出す」など) は、問題を別の場所に移動させる緩和策にすぎません。

抽象化のレイヤーを追加することを検討する必要があります。アプリケーションは、最小権限の原則を適用して、アプリケーションが必要とする CRUD 機能のみを提供するリモート Web サービスにアクセスする必要があります。最新のクライアント/サーバー アーキテクチャは、「リッチ クライアント」(Swing アプリケーションなど) が DBMS と直接対話しないように設計されています。はい、遅くなりますが、より安全でスケーラブルです。また、リッチ クライアントは「あまりリッチ」 (ビジネス ロジックを実装しない) になり、テーブルを変更した場合などにクライアントを更新する必要がなくなります。

Web サービスを使用すると、複雑な制約を適用することもできます。たとえば、オンライン ヘルプ デスクを考えてみましょう。一般的なルールは、クローズされたチケットにメッセージを投稿できないことです。DBMSでそれをどのように実施しますか? あなたの DBMS にログインできれば、closed属性が に設定されたチケットに好きなだけメッセージを投稿できます1。一部の DBMS でサポートされていない面倒な CHECK 句がない限り、制約を強制するものはありません。

あなたのDBを隠してください!

REST は、Web サービス用の SOAP の軽量な代替手段と考えてください。Java では、 Jerseyを使用して REST サーバーとクライアントを簡単に作成できます。

于 2013-01-06T11:52:22.763 に答える
1

問題は、資格情報をコードにハードコーディングしてはならないことです。これは、Web サービス資格情報にも当てはまります。

ユーザー名のパスワードを、1 回 (最初の起動時) または定期的に (毎月など) 要求することを提案します。次に、資格情報をユーザーのホーム ディレクトリに保存し、所有者のみがアクセスできるようにアクセス許可を設定します (OS がセキュリティを気にするようにします)。認証を必要とする Web サーバーのほとんどは、多かれ少なかれこれらの線に沿って動作します。

于 2013-01-06T12:01:00.293 に答える
0

あなたが言った

アプリケーションにパスワードを直接書き込むことなく、サーバー(datbaseを持つネットワーク上のコンピューターの1つ)に接続するための解決策が必要です。サーバー上のファイルから読み取る必要があります。

最初にdbサーバーからパスワードにアクセスするには、サーバー側(アプリケーションがデプロイされている場所)のどこかでpwdが必要なdbサーバーにアクセスする必要があるため、サーバーをDBサーバーとして意味していないことを願っています:)理想的には、資格情報を提供する必要がありますアプリケーションがデプロイされているプロパティファイル内。これは一般的に行われている方法です

セキュリティに関して私が考えることができる1つの方法は、プロパティファイルにクレデンシャルを生成するプログラムを作成し、ある時点でクレデンシャルを変更するためにdbadminにメールを送信することです。

于 2013-01-06T12:12:32.247 に答える