findbugs и проблема безопасности пароля базы данных

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


 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.

Что лучший способ состоит в том, чтобы инициализировать соединение с базой данных, не имея этого нарушения защиты?

8
задан mabuzer 28 June 2010 в 12:00
поделиться

5 ответов

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

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

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

2
ответ дан 5 December 2019 в 17:34
поделиться

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

3
ответ дан 5 December 2019 в 17:34
поделиться

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

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

3
ответ дан 5 December 2019 в 17:34
поделиться

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

0
ответ дан 5 December 2019 в 17:34
поделиться

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

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

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

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

conn = DriverManager(url, properyObject);
2
ответ дан 5 December 2019 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: