在getter中返回Mutable类对象是OWASP安全威胁

时间:2012-07-11 08:26:53

标签: class immutability code-access-security owasp

我正在针对我的模块的代码审核报告修复代码。它说

"Avoid methods that might expose internal representations by returning arrays or other mutable fields"`

现在我的应用程序处于spring mvc框架工作中,并且具有用于业务目的的分层智能结构,并具有实现它们的java类和接口。并且其中很多数据主要是在hibernate pojo java类的getter方法和服务接口对象getter方法中报告的。例如 - 像

这样的hibernate getter方法
public Timestamp getAltgendate() {
        return this.altgendate;
    }

public AltM getAltM() {
        return this.altM;
    }

服务接口对象,如

 public ReportService getReportService() {
        return reportService;
    }

    public PService getPService() {
        return pService;
    }

这些都是可变的字段和对象....我需要它们来解决目的。那么如何解决这些问题呢?任何建议,任何人!

编辑@下午6:30 完成了很多功课。首先在我的代码中实现java Cloneable接口,如

public Object clone() throws CloneNotSupportedException {
        try{
        ReportServiceImpl reportServiceImplClone = new ReportServiceImpl();
        return reportServiceImplClone;
        }catch (Exception e){
         logger.error("Deep copy cannot be created due to an exception :", e);
        }
        return  null;
    }

我的Impl类中的代码,并通过getter接口在控制器中调用它,如

public ReportService getReportService() {
        return (ReportService)reportService.clone();
    }

但Cloneable界面克隆并不是那么可靠,因为我从不同的博客和文章以及所有内容中了解到.... 因此,我尝试通过为类成员使用final关键字使类成为不可变,删除setter并使用参数化构造函数初始化服务类对象。但这也是徒劳的,因为我有一个Spring框架体系结构,其中包含服务和servlet以及定义xmls的数据访问对象,我需要使用显式setter进行处理,并对框架提出问题。

现在第三个是使用org.apache.commons.lang.SerializationUtils API来克隆getter方法返回的对象。代码就像

 public ReportService getReportService() {
 return (ReportService)SerializationUtils.clone((Serializable)reportService);
   }

此解决方案也有限制,我从谷歌了解到。

这一直到现在。我需要你真正的建议,我需要实施哪个解决方案,因为它们都有一些缺点和解决问题的优势。 关于关注问题的所有EXPERT评论都欢迎!!!!!!!!! 在此先感谢。

0 个答案:

没有答案