8

次のコードを使用してデータベース接続を初期化します。


 public Connection getConnection() {
        try {
            if (null == connection) {
                String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
                Class.forName(driverName);

                // Create a connection to the database
                String serverName = "localhost";
                String database = "database";
                String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
                String username = "username";
                String password = "password";
                connection = DriverManager.getConnection(url, username, password);
            }
            return connection;
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
        throw new NullPointerException("Cannot establish database connection...");
    }

そして、それを行うのは悪い習慣だと知っています。また、私はFindBugsコードに反対し、次のようなセキュリティの問題が発生しました。 This code creates a database connect using a hardcoded, constant password. Anyone with access to either the source code or the compiled code can easily learn the password.

このセキュリティ違反を起こさずにデータベース接続を初期化するための最良の方法は何ですか?

4

5 に答える 5

4

プロパティファイルまたはLDAPまたは同様のものからパスワードを読み取り、ソフトウェアの実行に使用されたアカウントのみへのそれらへの安全なアクセス(開発者は誰もアクセスできないようにする必要があります)。

于 2010-06-28T12:02:13.270 に答える
3

単純なファイルを使用してデータベースのプロパティを保存し、ハードコーディングする代わりにコードで読み取ります。これはクリーンであるだけでなく、ファイルアクセスを制限することもできます。

このリンクはあなたを助けるかもしれません。

于 2010-06-28T12:05:50.133 に答える
3

このコードは、ハードコードされた一定のパスワードを使用してデータベース接続を作成します。。

このセキュリティの問題は、DB名、ユーザー名、およびパスワードを使用したために発生します。しかし、「ソースコードまたはコンパイルされたコードのいずれかにアクセスできる人なら誰でも簡単にパスワードを知ることができる」という問題を確実に解決することはできません。私はUが最初の問題を解決できるに違いない。

プロパティを使用して、 setproperty()メソッドを使用してプロパティオブジェクトにエンコードできるDBuesrnameとパスワードを含めることができます。

これで、プロパティオブジェクトをgetConnection()メソッドに含めることができます。

conn = DriverManager(url, properyObject);
于 2010-06-28T14:36:33.427 に答える
2

Webアプリケーションの大部分は、SQL接続にハードコードされたユーザー名/パスワードを使用します。本番クレデンシャルをソース管理にチェックインしたり、インターンに本番データベースを削除する機能を与えたりすることは、一般的に眉をひそめます。本番クレデンシャルは保護する必要があり、特権のある従業員のみがそれらにアクセスできる必要があります。

Webアプリケーションが構成ファイルをリークすることはよくあることです。たとえば、.xmlファイルがwebrootに保存されている場合、リモートでアクセスできますhttp://localhost/configs/db_config.xml

データベースへのアクセスを禁止するのが一般的な方法です(mysqlのtcpポート3306をブロックします)。実際、これはPCI-DSSの要件です。ユーザー名とパスワードをどこで入手しても、役に立たないでしょう。

于 2010-06-29T06:40:17.367 に答える
0

Windowsボックスを使用している場合は、パスワードを構成ファイルに保存してから、DPAPIを使用してファイルのファイル/セクションを暗号化できます。このように、キー管理についても心配する必要はありません。

于 2010-06-28T13:39:44.233 に答える