계: 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);


모든 주요 웹 응용 프로그램 컨테이너는 리소스 관리 프레임워크의 일부로 공용 데이터베이스 연결 관리 기능을 제공합니다. 응용 프로그램에 이 기능을 복제하는 것은 어려운 작업이고 오류가 발생하기 쉽기 때문에 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