Reino: API Abuse

Uma API é um contrato entre quem chama e o que se chama. As formas mais comuns de abuso de API ocorrem quando o responsável pela chamada não respeita sua parte do contrato. Por exemplo, se um programa não chama chdir() após chamar chroot(), ele viola o contrato que especifica como alterar o diretório raiz ativo de forma segura. Outro bom exemplo de abuso de biblioteca é esperar que o elemento chamado retorne informações confiáveis de DNS ao responsável pela chamada. Nesse caso, o responsável pela chamada abusa a API do elemento chamado ao fazer certas suposições sobre seu comportamento (isto é, que o valor de retorno pode ser usado para fins de autenticação). A outra parte também pode violar o contrato entre quem chama e o que se chama. Por exemplo, se um programador definir SecureRandom como subclasse e retornar um valor não aleatório, o contrato será violado.

J2EE Bad Practices: getConnection()

Abstract
O padrão J2EE proíbe o gerenciamento direto de conexões.
Explanation
O padrão J2EE requer que os aplicativos usem as instalações de gerenciamento de recursos do contêiner para obter conexões com recursos.

Por exemplo, um aplicativo J2EE deve obter uma conexão com o banco de dados da seguinte maneira:


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


e deve evitar obter uma conexão desta maneira:


conn = DriverManager.getConnection(CONNECT_STRING);


Cada principal contêiner de aplicativo Web fornece o gerenciamento de conexões com bancos de dados em pool como parte de sua estrutura de gerenciamento de recursos. Duplicar essa funcionalidade em um aplicativo é um processo difícil e propenso a erros, o que explica em parte sua proibição de acordo com o padrão 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