Pular para o conteúdo
Todos os conceitos

Entrada que vira comando

O perigo começa onde um valor que o usuário escolhe entra no texto de um comando.

Um programa confia no que ele mesmo escreveu e desconfia do que vem de fora. Entrada contaminada (tainted input em inglês) é qualquer valor que chega do usuário: um campo de formulário, um parâmetro da URL, um cabeçalho. O problema de segurança nasce no ponto exato em que esse valor, sem ser conferido, entra num comando que o programa vai executar: uma consulta SQL, um comando de terminal, um nome de arquivo.

Revisar código em busca de injeção é seguir cada entrada desde onde ela chega até onde ela é usada. Se no caminho ela é convertida (virar inteiro com (int)), conferida (comparada com uma lista fixa de valores aceitos) ou entregue como dado (parâmetro de consulta), ela está segura. Se ela é colada no texto do comando com + ou com aspas, ali está o furo.

No exemplo abaixo, três entradas chegam pela URL. Duas passam por uma defesa; uma vai crua para dentro do SQL. Só essa última é um ponto de injeção.

entradas da URL page vira inteiro (int) seguro sort lista de permissao seguro category colado cru no comando ponto de injecao WHERE category = ' ... '
Três entradas chegam pela URL: page vira inteiro e sort passa por uma lista de permissão, as duas seguras; category é colada crua no comando SQL, o ponto de injeção.

Aparece nestes desafios