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.
Code Correctness: Negative Content-Length
Content-Length
é definido como negativo.Content-Length
de um pedido indica que um programador está interessado nacomunicação do tamanho dos dados POST enviados ao servidor. No entanto, esse cabeçalho deverá ser
0
ou umnúmero inteiro positivo.
Exemplo 1: O código a seguir definirá um
Content-Length
incorreto.
URL url = nova URL("http://www.exemplo.com");
HttpURLConnection huc = (HttpURLConnection)url.openConnection();
huc.setRequestProperty("Content-Length", "-1000");
Content-Length
é definido como negativo.Content-Length
de uma solicitação indica que um programador está interessado nacomunicação do tamanho dos dados POST enviados para o servidor. No entanto, esse cabeçalho deverá ser
0
ou umnúmero inteiro positivo.
Exemplo 1: Este código define o cabeçalho
Content-Length
incorretamente como negativo:
xhr.setRequestHeader("Content-Length", "-1000");