Проблема FindBugs для пароля

try {
    Class.forName(driver);
    con = DriverManager.getConnection(url + db, user, pass);
    PreparedStatement st = con.prepareStatement(
        "INSERT INTO menu(menu.menuID,menu.name,menu.info,menu.price) values(?,?,?,?)");
    st.setString(1, value1);
    st.setString(2, value2);
    st.setString(3, value3);
    st.setString(4, value4);
    st.executeUpdate();
    JOptionPane.showMessageDialog(p1, "Data is successfully inserted into database.");
    con.close();
} catch (Exception e) {
    JOptionPane.showMessageDialog(p1,
            "Error in submitting data!");
}

Я запустил FindBugs, и это ошибка, которая появится в строке 3:

Постоянно закодированный пароль базы данных в ie.lyit.flight.Changeadd$3.actionPerformed(ActionEvent)

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

Ранг: Страшно (7), уверенность: Нормально Шаблон: DMI_CONSTANT_DB_PASSWORD Тип: Дм, Категория: БЕЗОПАСНОСТЬ (Безопасность)

Мне было интересно, если кто-нибудь знает, как избавиться от этой ошибки и как я буду делать это?

3 ответа

Инструменты анализа кода проверяют любые циклические надежды в коде наряду с поиском лучших практик (или их нарушений).

Во время разработки вы можете игнорировать такое предупреждение, но да, как только вы покончили с бизнес-логикой, всегда полезно применять передовые методы - в этом случае считайте пароль из файла конфигурации или свойств.

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

Вы также можете посмотреть на:

Если вы используете jtd для подключения к базе данных, нет необходимости указывать имя пользователя и пароль для подключения.

            Connection conn = null;
            String url = "jdbc:jtds:sqlserver://" +serverName+ "/" +"master";
            String driver = "net.sourceforge.jtds.jdbc.Driver";
            Class.forName(driver);
            conn = DriverManager.getConnection(url);

В моем случае master - это имя базы данных. Просто замените его своим.

Другие вопросы по тегам