Reino: API Abuse

Un API es un contrato entre un autor de llamada y un receptor de llamada. Las formas de abuso de API más comunes los produce el autor de llamada cuando no consigue atender su fin de este contrato. Por ejemplo, si un programa no consigue llamar chdir() después de llamar chroot(), se viola el contrato que especifica cómo cambiar el directorio de origen activo de una forma segura. Otro buen ejemplo de un abuso de manual es esperar que el receptor devuelva una información de DNS de confianza al autor de llamada. En este caso, el autor de llamada abusa el API del receptor haciendo determinadas suposiciones sobre su comportamiento (que el valor de retorno se puede usar con fines de autenticación). También se puede violar el contrato entre el autor de llamada y el receptor desde el otro lado. Por ejemplo, si un codificador envía SecureRandom y devuelve un valor no aleatorio, se viola el contrato.

J2EE Bad Practices: getConnection()

Abstract
El estándar J2EE prohíbe la administración directa de las conexiones.
Explanation
El estándar J2EE requiere que las aplicaciones usen las utilidades de administración de recursos del contenedor para obtener conexiones a los recursos.

Por ejemplo, una aplicación J2EE debe obtener una conexión de base de datos, como se indica a continuación:


ctx = new InitialContext();
datasource = (DataSource)ctx.lookup(DB_DATASRC_REF);
conn = datasource.getConnection();


y debe evitar obtener una conexión de la siguiente forma:


conn = DriverManager.getConnection(CONNECT_STRING);


Todos los contenedores de aplicaciones web principales ofrecen administración de conexiones de base de datos agrupadas en conjuntos como parte de su estructura de administración de recursos. La duplicación de esta funcionalidad en una aplicación es difícil y susceptible a errores, que es parte del motivo por el que está prohibida en virtud de la norma de J2EE.
References
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 3
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 5
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 245
desc.semantic.java.j2ee_badpractices_getconnection