Métodos de control de seguridad privados o finales

RECU-0612 (Recurso Ejemplo)

Descripción

Las clases no finales que contienen los métodos que llevan a cabo controles de seguridad pueden verse comprometidas si una subclase maliciosa reemplaza los métodos y omite las comprobaciones.

Ejemplos

Un ejemplo de código vulnerable seria el siguiente:

public void readSensitiveFile() {
  try {
    SecurityManager sm = System.getSecurityManager();
    if(sm != null) {  // Check if file can be read
      sm.checkRead("/temp/tempFile");
    }
    // Access the file
  } catch (SecurityException se) {
    // Log exception 
  }
}

El siguiente código prohíbe la herencia del método readSensitiveFile () por el que se declara como final

public final void readSensitiveFile() {
  try {
    SecurityManager sm = System.getSecurityManager();
    if(sm != null) {  // check if file can be read
      sm.checkRead("/temp/tempFile");
    }
    // Access the file
  } catch (SecurityException se) {
    // Log exception
  }
}

Contenidos relacionados