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
在源代码中包含未加密的硬编码身份验证凭据很危险,因为这些凭据很容易被发现。例如,代码可能是开源的,或者它可能会泄露或意外泄露,从而使攻击者可以看到凭据。这反过来又可能使他们能够获得未经授权的访问权限,或获取特权信息。
建议¶
从源代码中删除硬编码的凭据,例如用户名、密码和证书。相反,如果需要,请将它们放在配置文件、环境变量或其他数据存储中。如果可能,将包含凭据数据的配置文件与源代码分开存储,并将其存储在受限访问的安全位置。
示例¶
以下代码示例使用硬编码的用户名和密码连接到数据库
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
}
相反,可以通过环境变量提供用户名和密码,可以在不硬编码源代码中的凭据的情况下从外部设置这些变量。