계: API Abuse
API는 호출자와 피호출자 간의 계약입니다. 가장 흔한 형태의 API 오용은 호출자가 이 계약에서 자신의 몫을 이행하지 못하기 때문에 발생합니다. 예를 들어, 프로그램이 chroot()를 호출한 후 chdir()을 호출하지 못하면 활성 루트 디렉터리를 안전하게 변경하는 방법을 지정하는 계약을 위반하는 것입니다. 라이브러리 오용의 또 다른 좋은 예는 피호출자가 호출자에게 신뢰할 만한 DNS 정보를 반환할 것으로 예상하는 것입니다. 이 경우, 호출자는 자신의 행동에 대해 특정한 가정을 함으로써(반환 값이 인증 목적으로 사용될 것으로 예상) 피호출자 API를 오용합니다. 다른 쪽에서 호출자-피호출자 계약을 위반할 수도 있습니다. 예를 들어, 코더가 하위 클래스 SecureRandom을 지정하고 임의 값이 아닌 값을 반환하는 경우 계약을 위반하는 것입니다.
EJB Bad Practices: Use of Sockets
Abstract
프로그램은 소켓을 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].
이 경우, 프로그램은 다음 EJB 지침을 위반합니다.
"enterprise bean은 소켓에서 수신 대기하거나 소켓에서 연결을 수락하거나 멀티캐스트에 소켓을 사용할 수 없습니다."
규격에서 다음과 같이 정당화하는 요구 사항입니다.
"Enterprise Bean 아키텍처는 Enterprise Bean 인스턴스가 네트워크 소켓 클라이언트가 되는 것을 허용하지만, 네트워크 서버가 되는 것은 허용하지 않습니다. 인스턴스가 네트워크 서버가 되도록 허용하면 Enterprise Bean의 기본 기능인 Enterprise Beans 클라이언트에 서비스를 제공하는 것과 충돌하게 됩니다."
이 경우, 프로그램은 다음 EJB 지침을 위반합니다.
"enterprise bean은 소켓에서 수신 대기하거나 소켓에서 연결을 수락하거나 멀티캐스트에 소켓을 사용할 수 없습니다."
규격에서 다음과 같이 정당화하는 요구 사항입니다.
"Enterprise Bean 아키텍처는 Enterprise Bean 인스턴스가 네트워크 소켓 클라이언트가 되는 것을 허용하지만, 네트워크 서버가 되는 것은 허용하지 않습니다. 인스턴스가 네트워크 서버가 되도록 허용하면 Enterprise Bean의 기본 기능인 Enterprise Beans 클라이언트에 서비스를 제공하는 것과 충돌하게 됩니다."
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 577
desc.structural.java.ejb_bad_practices_use_of_sockets