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

データベースの接続に 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);

私の場合、マスターはデータベース名です。それをあなたのものに置き換えてください。

于 2015-04-20T13:18:26.360 に答える
0

コード分​​析ツールは、ベスト プラクティス (またはそれらの違反) を探すとともに、コード内のループ ホープをチェックします。

開発中はこのような警告を無視できますが、ビジネス ロジックを作成したら、常にベスト プラクティスを適用することをお勧めします。この場合は、構成またはプロパティ ファイルからパスワードを読み取ります。

于 2015-04-20T13:08:52.830 に答える
0

これは単純に、パスワードはアプリケーションのソース コードに直接保存すべきではないことを示しています。パスワードは多くの場合共有されており、暗号化されていないためです。代わりに何らかの外部ソースを使用し、パスワードを保存せず、パスワード ハッシュのみを保存することをお勧めします。

以下もご覧ください。

于 2015-04-20T13:24:19.357 に答える