Проблема 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 - это имя базы данных. Просто замените его своим.