当前位置: 首页 > 面试题库 >

findbugs和数据库密码安全性问题

唐阳晖
2023-03-14
问题内容

我正在使用以下代码初始化数据库连接:

 public Connection getConnection() {
        try {
            if (null == connection) {
                String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
                Class.forName(driverName);

                // Create a connection to the database
                String serverName = "localhost";
                String database = "database";
                String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
                String username = "username";
                String password = "password";
                connection = DriverManager.getConnection(url, username, password);
            }
            return connection;
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
        throw new NullPointerException("Cannot establish database connection...");
    }

而且我知道这样做是不好的做法,而且我还FindBugs违反了代码,并遇到了如下安全问题: This code creates a database connect using a hardcoded, constant password. Anyone with access to either the source code or the compiled code can easily learn the password.

在没有此安全漏洞的情况下初始化数据库连接的最佳方法是什么?


问题答案:

绝大多数Web应用程序都使用硬编码的用户名/密码进行SQL连接。通常不赞成将生产凭证检查到源代码控制中,或者赋予实习生删除生产数据库的能力。生产凭证应受到保护,只有特权员工才能访问它们。

Web应用程序通常会泄漏其配置文件。例如,如果.xml文件存储在webroot中,则可以远程访问它:http://localhost/configs/db_config.xml

通常的做法是禁止访问数据库(对于mysql,阻止tcp端口3306)。实际上,这是PCI-DSS的要求。即使要获取用户名和密码,也将毫无用处。



 类似资料:
  • 我正在开发一个将文件上传到Azure存储的.NET应用程序。我正在利用https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/教程中所做的客户端加密 应用程序工作,即,我可以成功地上传一个加密的blob到一个选定的存储帐户和容器。 但是,我对RSA密钥的安全性有

  • 我在Powershell中编写了一个程序,该程序在Azure Functions应用程序中按计划运行。为了避免硬编码的凭据,我创建了一个Azure密钥库来存储秘密。我在Azure函数中创建了一个托管标识,在Azure Key Vault中创建了秘密,然后在Azure函数中创建了应用程序设置,并使用指向Azure Key Vault中秘密的URL。程序引用应用程序机密(APPSETTING),并按照

  • 问题内容: 我让人们在氏族中提交用户名和密码,然后我需要知道使用此代码将其提交到数据库中是否安全,或者在数据库中是否安全。 我使用参数来避免SQL注入攻击。 -------------------------------------------------- -------------------------------- 这不是重复的,因为以不同的方式询问和存储密码。它使用MD5哈希密码。 问题

  • 我为Jetty 9和Kafka使用ssl密钥库。我需要提供密钥库和密钥密码来访问密钥库和私钥。但是,我不想在配置文件中以明文形式提供这些密码。还有哪些其他选项可以安全地提供/加密密码?每种方法的优缺点是什么?

  • 问题内容: 希望将用户名和密码存储在数据库中,并且想知道这样做最安全的方法是什么。我知道我必须在某处使用盐,但是不确定如何安全地生成盐或如何将其应用于加密密码。一些示例Python代码将不胜感激。谢谢。 问题答案: 将密码+盐存储为哈希和盐。看一下Django的工作方式:基本文档和源代码。它们在数据库中存储 在单个char字段中。您也可以将这三个部分存储在单独的字段中。 设置密码的功能: get_

  • 我在Android Studio中创建了一个应用程序,并将其与Firebase实时数据库链接。我需要执行3次验证: > 由Firebase通知服务生成的一次性PIN和手机验证。 在下一个屏幕上,用户的pin会根据我的数据库进行检查,最后他会进入菜单屏幕。 现在,我不知道应该设置什么作为我的安全规则,因为身份验证是在第2步进行的,所以我不能使用“auth”来设置规则,如果没有“auth”,数据库将是