SV.PASSWD.PLAIN.HC
保护不足的凭据
产品在传输或存储身份验证凭据时使用的方法不安全,容易遭到未经授权的拦截和/或检索,这时候就会出现这个问题。
漏洞与风险
攻击者可以取得用户帐户的访问权限,然后访问用户帐户使用的敏感数据。
漏洞代码示例
复制
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
String password = prop.getProperty("password"); //Defect
DriverManager.getConnection(url, usr, password);
Klocwork 在第 3 行报告 SV.PASSWD.PLAIN.HC 缺陷,因为上述代码是从属性文件读取密码,然后使用该密码连接到数据库。此代码可以成功运行,但有权访问 config.properties 文件的任何人都可以读取密码的值。举例来说,如果员工可以访问此信息,则可以使用此信息侵入系统。
修正代码示例
复制
/*
* First, create (or ask some other component for) the adequate encryptor for
* decrypting the values in the .properties file.
*/
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("jasypt"); // could be obtained from the web, env variable, etc
encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
encryptor.setIvGenerator(new RandomIvGenerator());
/*
* Create an EncryptableProperties object and load it the usual way.
*/
Properties props = new EncryptableProperties(encryptor);
props.load(new FileInputStream("/path/to/my/configuration.properties"));
/*
* To get an encrypted value, do exactly the same.Decryption will
* be transparently performed behind the scenes.
*/
String datasourcePassword = props.getProperty("datasource.password");
Klocwork 不再报告缺陷,因为从属性文件检索密码时,已在属性文件上应用加密技术(Jasypt 加密)。