Questão nº 51
Questão de Tecnologia da Informação · FCC TRE-PR 2017 (nº 51)
Considere a situação em que um usuário é solicitado a inserir o nome de uma cidade através de um formulário em uma aplicação web. Se ele inserir a cidade 'Curitiba', a consulta SQL criada pelo script será:
`SELECT FROM EleicoesTable WHERE City = 'Curitiba'`
No entanto, suponha que o usuário insira o seguinte:
`'Curitiba'; drop table EleicoesTable--`
Nesse caso, a seguinte consulta SQL é gerada pelo script:
`SELECT FROM EleicoesTable WHERE City = 'Curitiba';drop table EleicoesTable--`
Considerando que o ponto-e-vírgula (;) denota o término de uma consulta e o início de outra e que o hífen duplo (--) indica que o restante da linha atual é um comentário e deve ser ignorado, é correto afirmar:
- AComo o código injetado está sintaticamente incorreto, não será executado pelo servidor de banco de dados.
- BMesmo que o código SQL injetado esteja sintaticamente correto, a violação será detectada programaticamente.
- CÉ responsabilidade do servidor de banco de dados validar todas as entradas de usuário e verificar o código que executa comandos SQL.
- DQuando essa instrução for executada, o Banco de Dados selecionará primeiro todos os registros em EleicoesTable onde City é Curitiba e, em seguida, descartará EleicoesTable. (alternativa correta)
- EEste é um exemplo de como uma aplicação web pode dar liberdade ao usuário de atualizar dados em uma base de dados, mas somente os programadores, que conhecem os nomes e campos das tabelas, conseguem fazer isso.
Resposta comentada
Gabarito Alternativa D
SQL Injection é uma falha de segurança onde um atacante insere comandos SQL maliciosos em campos de entrada de uma aplicação web, fazendo com que o banco de dados execute esses comandos não intencionais e potencialmente perigosos.
(A) Incorreta: O código injetado é sintaticamente correto para o banco de dados, que o interpretará como duas instruções SQL separadas: uma `SELECT` e uma `DROP TABLE`.
(B) Incorreta: A detecção programática de violações de SQL Injection não é automática; ela requer a implementação de medidas de segurança específicas na aplicação (como prepared statements ou validação de entrada), que frequentemente estão ausentes em sistemas vulneráveis.
(C) Incorreta: A responsabilidade de validar e sanitizar as entradas do usuário recai sobre a aplicação web, antes que os dados sejam enviados ao servidor de banco de dados. O servidor de banco de dados apenas executa as instruções SQL que recebe.
(D) Correta: O banco de dados processará a primeira instrução `SELECT * FROM EleicoesTable WHERE City = 'Curitiba'` até o ponto-e-vírgula. Em seguida, ele executará a segunda instrução `drop table EleicoesTable`, pois o hífen duplo (--) faz com que o restante da linha seja tratado como comentário e ignorado.
(E) Incorreta: SQL Injection é uma vulnerabilidade de segurança grave, não uma "liberdade" concedida ao usuário. Ela permite a manipulação não autorizada do banco de dados por qualquer pessoa que explore a falha, sem a necessidade de ser um programador ou conhecer previamente os nomes das tabelas. Armadilha: Esta alternativa tenta confundir o conceito de falha de segurança com uma funcionalidade intencional de "atualização de dados", além de sugerir que apenas programadores poderiam explorá-la, o que é falso.
Fonte: FCC TRE-PR 2017 Técnico Judiciário - Área Apoio Especializado - Especialidade Programação de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.