Fortify安全漏洞修复

By gavin

一、Log Forging(日志伪造)

解决方法:增加敏感字符过滤

/**
 * 过滤引起Log Forging漏洞的敏感字符
 * @param str
 */
private String filterLogForging(String str){
    List<String> sensitiveStr = new ArrayList<>();
    sensitiveStr.add("%0d");
    sensitiveStr.add("%0a");
    sensitiveStr.add("%0A");
    sensitiveStr.add("%0D");
    sensitiveStr.add("\r");
    sensitiveStr.add("\n");
    String normalize = Normalizer.normalize(str, Normalizer.Form.NFKC);
    Iterator<String> iterator = sensitiveStr.iterator();
    while (iterator.hasNext()){
        normalize.replace(iterator.next(),"");
    }
    return normalize;
}

二、Insecure Randomness(不安全随机数)

解决方法:将原本 Random sr = new Random() 换成SecureRandom sr = new SecureRandom()

三、Null Dereference(空指针异常)

解决方法:初始化变量为null后,引入之前增加非空判断

四、Unreleased Resource:Streams(未释放的流资源)

解决方法:当创建流后在finally方法中加入流的关闭操作

if(writer!=null){
   writer.close();
}