Malicious code vulnerability – May expose internal representation by incorporating reference to mutable object

Pasando Sónar a un proyecto Java, me apareció el error que aparece en el título: “Malicious code vulnerability – May expose internal representation by incorporating reference to mutable object”.

La persona que había codificado el proyecto no había tenido en cuenta que determinados valores podían ser modificados inintencionadamente. (Ejemplo de StackOverflow):

class MyClass {
private Date billDate;

public void setBillDate(Date billDate) {
this.billDate = billDate;
}
}

Si programamos:

MyClass m = new MyClass();
Date dateToBeSet = new Date();
m.setBillDate(dateToBeSet); //The actual dateToBeSet is set to m
dateToBeSet.setYear(...);
//Un-intentional modification to dateToBeSet, will also modify the m's billDate

Se puede ver que si modificamos la fecha inicial, también modificamos el valor de los otros objetos en los que hayamos usado la fecha dateToBeSet.

La modificación más elegante es tener en cuenta los valores null (estaba en un proyecto con JSF):

public Date getFechaIni() {
return fechaIni != null ? new Date(fechaIni.getTime()) : null;
}
public void setFechaIni(Date fechaIni) {
this.fechaIni = fechaIni != null ? new Date(fechaIni.getTime()) : null;
}

En vez de usar:

public Date getFechaIni() {
return fechaIni;
}

Todo esto viene explicado en el libro The CERT Oracle Secure Coding Standard for Java en la regla correspondiente: OBJ06J. Defensively copy mutable inputs and mutable internal components

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s