проблема с паролями в файлах поиска и ошибки - PullRequest
8 голосов
/ 28 июня 2010

Я использую следующий код для инициализации подключения к базе данных:


 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.

Каков наилучший способ инициализации соединения с базой данных без нарушения безопасности?

Ответы [ 5 ]

3 голосов
/ 28 июня 2010

Используйте простые файлы для хранения свойств базы данных и считывания их в коде вместо жесткого кодирования. Это не только чисто, но вы также можете ограничить доступ к файлам.

Эта ссылка может вам помочь.

3 голосов
/ 28 июня 2010

Считайте пароль из файла свойств или LDAP или аналогичного и защищенного доступа к ним только для учетной записи, используемой для запуска программного обеспечения (к которой ни один из разработчиков не должен иметь доступ).

2 голосов
/ 29 июня 2010

Подавляющее большинство веб-приложений используют жестко запрограммированное имя пользователя / пароль для своего SQL-соединения. Проверка производственных учетных данных в системе контроля версий или предоставление стажерам возможности удалять производственную базу данных, как правило, осуждается. Производственные учетные данные должны быть защищены, и только привилегированные сотрудники должны иметь к ним доступ.

Веб-приложения часто пропускают свои файлы конфигурации. Например, если в веб-корне хранится XML-файл, к нему можно получить удаленный доступ: http://localhost/configs/db_config.xml.

Обычной практикой является запрет доступа к вашей базе данных (заблокируйте tcp порт 3306 для mysql). На самом деле это требование PCI-DSS. Даже если имя пользователя и пароль будут получены, это будет бесполезно.

2 голосов
/ 28 июня 2010

Этот код создает соединение с базой данных, используя постоянный жесткий код..

Эта проблема безопасности возникает из-за того, что вы использовали имя базы данных, имя пользователя и пароль.Но, конечно, вы не можете решить проблему " Любой, кто имеет доступ к исходному коду или скомпилированному коду, может легко узнать пароль ".Бьюсь об заклад, вы можете решить первую проблему.

Вы можете использовать Свойства, чтобы включить имя пользователя и пароль вашей БД, с помощью которых вы можете закодировать в объект Свойства, используя setproperty () .

Теперь вы можете включить объект свойства в метод getConnection () :

conn = DriverManager(url, properyObject);
0 голосов
/ 28 июня 2010

Вы можете сохранить пароль в файле конфигурации и затем зашифровать файл / разделы файла с помощью DPAPI, если вы используете Windows box. Таким образом, вам не придется беспокоиться об управлении ключами.

...