界: API Abuse

API 是调用方和被调用方之间的约定。最常见的 API 滥用是由于调用方未能遵守此约定的终止导致的。例如,如果某个程序在调用 chroot() 后未能调用 chdir(),则违反了用于指定如何安全地更改活动根目录的约定。库滥用的另一个典型示例是期望被调用方向调用方返回可信的 DNS 信息。在这种情况下,调用方通过对被调用方行为做出某种假设(返回值可用于身份验证目的)滥用其 API。另一方也可能违反调用方-被调用方约定。例如,如果编码器子类化 SecureRandom 并返回一个非随机值,则将违反此约定。

J2EE Bad Practices: getConnection()

Abstract
J2EE 标准禁止对连接实行直接管理。
Explanation
J2EE 标准要求应用程序采用容器的资源管理器工具获取连接资源。

例如,一个 J2EE 应用程序应采用下列方式获取数据库连接:


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


并避免采用下列方式获取连接:


conn = DriverManager.getConnection(CONNECT_STRING);


每个主要的 Web 应用程序容器都提供了数据库连接管理,并将其作为资源管理框架的一部分。在应用程序中重写这个功能,其过程既复杂又容易出错,这也是 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