0
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 类型:Dm,类别:SECURITY(安全)

我想知道是否有人知道如何摆脱这个错误以及我将如何去做?

4

3 回答 3

0

代码分析工具检查代码中的任何循环希望,同时寻找最佳实践(或违反它们)。

在开发过程中,您可以忽略此类警告,但是是的,一旦您完成了业务逻辑,应用最佳实践总是好的——在这种情况下,从配置或属性文件中读取密码。

于 2015-04-20T13:08:52.830 回答
0

如果您使用 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 是数据库名称。只需将其替换为您的。

于 2015-04-20T13:18:26.360 回答
0

这只是告诉您密码不应直接存储在应用程序的源代码中,因为它通常是共享的且未加密。改用一些外部源,最好不要存储任何密码,只存储密码哈希。

您还可以查看:

于 2015-04-20T13:24:19.357 回答