FindBugs密码问题

时间:2015-04-20 12:54:13

标签: java findbugs programmers-notepad

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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是数据库名称。只需用你的替换它。

答案 2 :(得分:0)

这只是告诉您密码不应直接存储在应用程序的源代码中,因为密码通常是共享的而不是加密的。 使用一些外部源代码,甚至更好的是不存储任何密码,只存储密码哈希值。

你也可以看一下: