Fortofy扫描安全漏洞解决——Null Dereference (Code Quality, Control Flow)空指针

发布时间:2023年12月21日

问题描述:
? ? ? ?如果不符合程序员的一个或多个假设,则通常会出现 null 指针异常。如果程序明确将对象设置为 null,但稍后却间接引用该指针,则将出现 dereference-after-store 错误。此错误通常是因为程序员在声明变量时将该变量初始化为 null 所致。
? ? ? 空指针问题是Fortofy安全漏洞中最容易解决的问题,不同的代码触发空指针的方式不同,本篇文章演示几个常见的空指针及解决思路。


问题代码1 对null数据进行操作导致空指针异常:

//查询数据库获取Map类型数据
Map<String, String> ruleMap=new HashMap<>();
Map<String, Object> map =jdbcTemplate.queryForMap(sql, bussId, materials, userId, orgId);
if(!map1.isEmpty()){
    for (Map.Entry<String, Object> obj : map.entrySet()) {
           //这行代码会被扫描出空指针,如果obj的value为空,那么null.toString()就会空指针异常
           ruleMap.put(obj.getKey(),obj.getValue().toString());
       }
}

解决方案:

//查询数据库获取Map类型数据
Map<String, String> ruleMap=new HashMap<>();
Map<String, Object> map =jdbcTemplate.queryForMap(sql, bussId, materials, userId, orgId);
if(!map1.isEmpty()){
    for (Map.Entry<String, Object> obj : map.entrySet()) {
           //提前判断obj的value值是否为空,如果是空则不做toString,直接赋值即可
            String mapValue=obj.getValue()!=null?obj.getValue().toString():null;
           ruleMap.put(obj.getKey(),mapValue);
       }
}

问题代码2?调用空对象中方法触发空指针:

JSONObject obj = null;
StringBuffer objJSON = new StringBuffer("。。。。。。。");
// 转换成JSONObject对象
obj = JSON.parseObject(objJSON.toString());
//obj为null触发空指针
obj.put("sort", sort);

解决方案:增加非空判断

if(obj!=null){
   obj.put("sort", sort);
}

文章来源:https://blog.csdn.net/weixin_52536274/article/details/135131166
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。