Filtragem Incorreta de Caracteres de Escape
Ocorre quando o dado inputado na variável não é filtrado para remoção de caracteres de escape e então é transformado em uma query SQL. Isto resulta na potencial manipulação de queries executadas na database pelo usuário da aplicação.
Um exemplo:
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
Este código é designado para trazer resultados de um determinado username a partir da tabela users. Entretanto, se a variável “userName” for modificada para um determinado valor especifico que contenha caracteres de escape como por exemplo ‘, “, ), essa query SQL pode retornar mais do que o autor do código previu. Por exemplo, colocando o “userName” como:
a' or 't'='t
Ao ser executada pelo código da aplicação web a database irá executar o seguinte query:
SELECT * FROM users WHERE name = 'a' OR 't'='t';
Se este código for utilizado em um procedimento de autenticação, este exemplo pode ser utilizado para selecionar um usuário válido porque a validação do query ‘t’=’t’ é sempre válida, afinal t sempre é igual a t.
Gerenciamento de tipos de dados incorretos
Ocorre quando um valor inputado em um campo não é checado pelo tipo dele. Por exemplo, se a aplicação irá fazer uma checagem na base utilizando uma variável de tipo numérico e o programador não colocou uma checagem para validar se a variavel realmente tem um valor numérico. Por exemplo:
statement := "SELECT * FROM data WHERE id = " + a_variable + ";"
Está claro neste statement que o autor do código definiu a_variable para ser um número correlacionado com o campo “id”. Entretanto, se de fato for uma string o usuário pode manipular o statemente como quiser, inclusive sobrepassando a necessidade de um caracter de escape. Exemplo, colocando a variavel como:
1;DROP TABLE users
Irá deletar a tabela “users” da database, porque para o sql a string acima será executada da seguinte forma:
SELECT * FROM DATA WHERE id=1;DROP TABLE users;
Como o character “;” no SQL é um delimitador de linha, tudo que vier após ele será considerado um novo comando.
Diretor de Operações da In2Sec (Itelligence to Security), é formado em Análise de Sistemas com MBA em Gestão de Riscos, atuou em diversas empresas nacionais e multinacionais, no Brasil e exterior. Especialista em Gestão de Riscos e Segurança da Informação, é responsável pelas operações das Américas da Certificadora TrustSign e das Consultorias de Segurança e-Horus e A.