web-dev-qa-db-ja.com

Webアプリケーションにユーザー名/パスワードを保存するための実践

私は次の質問を読みました: Javaアプリケーション にパスワードを保存していますが、私の場合に役立つ回答が見つかりません。

それで、これがどういうわけかそれに関連する私の質問です。私はJavaバックエンドデータベース付きのWebアプリケーションで、ユーザー名とパスワードでデータベースアクセスを保護しています。

現在、ユーザー名/パスワードはWebサーバー上の.propertiesファイルにあります。サーバーは安全ですが、プレーンテキストでそのようにするのはちょっと気になります。

安全なストアを使用してユーザー名とパスワードを暗号化/復号化しようとしたが、ストア自体はパスワードで保護されているので、どこに保存すればよいですか。スクエアワンに戻りました。

そう?他のシステム(データベース、Webサービスなど)に接続するためのユーザー名/パスワードを保存する最良の方法は何ですか

18
johnD

サーバーは、リソースRにアクセスできる必要があります。攻撃者がサーバーを完全に制御できる場合、攻撃者は定義により、サーバーがアクセスできるすべてのリソースにアクセスできます。サーバーを保護することを除いて、これについてできることはまったくありません。

攻撃者がサーバーを完全に制御することはできないが、サーバーのファイルシステムにアクセスできる場合、問題はサーバーが(外部の助けなしに)自律的に起動する必要があるかどうかです。サーバーが自律的に起動する必要がある場合、リソースRにアクセスするために必要なすべてのデータは、サーバーのファイルシステムのどこかに存在する必要があり、攻撃者が利用できる必要があります。最善の方法は、パスワードを難読化することです-頑張ってください。

サーバーが外部ヘルプを使用してブートできる場合、最良のオプションは、ブート中にパスワードを入力するように管理者に要求することです(そしてパスワードをRAMに保存しておきます)。それが実用的でない場合(通常はそうではありません)、USBトークンを使用してパスワードを保護できます(たとえば、暗号化されたパスワードを保存し、USBトークンを使用してそれを復号化します)。

TL; DR:サーバーを起動するたびに手動でパスワードを入力できないとすると、サーバー自体を保護する以外にできることは多くありません。

13