データベースのパスワードがソースコードに平文で保存されるのを避けるにはどうすればよいですか?
-
09-06-2019 - |
質問
私が開発している Web アプリケーションでは、データベースに接続するときに現在単純なソリューションを使用しています。
Connection c = DriverManager.getConnection("url", "username", "password");
これはかなり危険です。攻撃者がソースコードにアクセスすると、データベース自体にもアクセスできます。データベースのパスワードをソースコードに平文で保存せずに、Web アプリケーションをデータベースに接続するにはどうすればよいですか?
解決
接続文字列を Web.config または App.config ファイルに保存し、それを保持するセクションを暗号化できます。以前のプロジェクトで接続文字列を暗号化するために使用した非常に優れた記事を次に示します。
http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html
他のヒント
.NET では、接続文字列を別の構成ファイルに保存するのが慣例です。
そこで、 設定ファイルは暗号化できる.
Microsoft SQL Server を使用している場合、ドメイン アカウントを使用してアプリケーションを実行し、データベースへの信頼された接続を使用する場合、これはすべて無関係になります。この場合、接続文字列にはユーザー名とパスワードは含まれません。
.NET プログラマーには次のテクニックをお勧めします。
- 構成ファイル内のパスワード/接続文字列を暗号化する
- クライアントとサーバーの間に信頼できる接続をセットアップします (つまり、Windows 認証などを使用します)
CodeProject の役立つ記事は次のとおりです。
ポイントを見逃していない限り、接続は接続プールを介してサーバーによって管理される必要があるため、接続資格情報はアプリではなくサーバーによって保持されます。
これをさらに進めて、一般に、フロントエンド Web アプリケーション (DMZ 内) が Web サービス (ドメイン内) 経由でのみ DB と通信するという規約に基づいて構築し、完全な分離と強化された DB セキュリティを提供します。
また、本質的に必要な以上の権限を DB アカウントに与えないでください。
別のアプローチは、すべての操作をストアド プロシージャ経由で実行し、アプリケーション ユーザーにこれらのプロシージャへのアクセスのみを許可することです。
MS SQL を使用していると仮定すると、ソース コード内のどこにもユーザー名/パスを必要としない Windows 認証を利用できます。そうでなければ、app.config + 暗号化を推奨する他の投稿者に同意する必要があります。
- O/Sユーザーを作成する
- そのユーザーのパスワードを O/S 環境変数に入力します
- そのユーザーとしてプログラムを実行します
利点:
- root またはそのユーザーのみがそのユーザーの O/S 環境変数を表示できます
- 再起動しても生き残る
- パスワードを誤ってソース管理にチェックインすることはありません
- ファイルのアクセス許可を台無しにすることを心配する必要はありません
- 暗号化キーの保存場所を心配する必要はありません
- ワークスXプラットフォーム