界: API Abuse

API は、呼び出し元と呼び出し先の間のコントラクトです。最も一般的な API の不正使用の形態は、呼び出し元がこのコントラクトの終わりを守らないことによって発生します。たとえば、プログラムが chroot() を呼び出した後に chdir() を呼び出すのに失敗すると、アクティブなルート ディレクトリを安全に変更する方法を指定したコントラクトに違反することになります。ライブラリの悪用のもう 1 つの良い例は、呼び出し先が信頼できる DNS 情報を呼び出し元に返すことを期待することです。この場合、呼び出し元は、呼び出し先の API の動作 (戻り値が認証目的に使用できること) についてある種の仮定をすることで、呼び出し先の 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 - Common Weakness Enumeration CWE ID 245
desc.semantic.java.j2ee_badpractices_getconnection