CodeQL 文档

API 调用中的硬编码凭据

ID: java/hardcoded-credential-api-call
Kind: path-problem
Security severity: 9.8
Severity: error
Precision: medium
Tags:
   - security
   - external/cwe/cwe-798
Query suites:
   - java-security-extended.qls
   - java-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

在源代码中包含未加密的硬编码身份验证凭据很危险,因为这些凭据很容易被发现。例如,代码可能是开源的,或者它可能会泄露或意外泄露,从而使攻击者可以看到凭据。这反过来又可能使他们能够获得未经授权的访问权限,或获取特权信息。

建议

从源代码中删除硬编码的凭据,例如用户名、密码和证书。相反,如果需要,请将它们放在配置文件、环境变量或其他数据存储中。如果可能,将包含凭据数据的配置文件与源代码分开存储,并将其存储在受限访问的安全位置。

示例

以下代码示例使用硬编码的用户名和密码连接到数据库

private static final String p = "123456"; // hard-coded credential

public static void main(String[] args) throws SQLException {
    String url = "jdbc:mysql://#/test";
    String u = "admin"; // hard-coded credential

    getConn(url, u, p);
}

public static void getConn(String url, String v, String q) throws SQLException {
    DriverManager.getConnection(url, v, q); // sensitive call
}

相反,可以通过环境变量提供用户名和密码,可以在不硬编码源代码中的凭据的情况下从外部设置这些变量。

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私