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 加密)。