SóProvas


ID
1544338
Banca
FCC
Órgão
TCM-GO
Ano
2015
Provas
Disciplina
Banco de Dados
Assuntos

Um Auditor de Controle Externo da área de TI do TCM/GO verificou que uma aplicação utiliza a seguinte chamada SQL:

String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";

Esta mesma aplicação utiliza um framework de persistência que faz a seguinte chamada em um formato SQL adaptado:

Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");

Esta aplicação está vulnerável a ataques de

Alternativas
Comentários
  • A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entradas de dados de uma aplicação. A vulnerabilidade é explorarda porque algumas aplicações não validam entradas de usuários.

    Para se defender é possível utilizar o  “Prepared Statements” ao invés de montar expressões SQL “puras”. 


    Fonte: http://www.w3schools.com/sql/sql_injection.asp

  • request.getParameter("id") abre espaço para uma injeção.

  • A injection é possível fazer o where listar tudo. Isso é possível, por exemplo, fazendo da sempre verdadeira.

    Fontes:


    www.profalmeidajunior.com.br 
    www.apcti.com.br

  • Como vimos, a montagem dinâmica das consultas SQL com a entrada do usuário pode inserir uma vulnerabilidade a um ataque conhecido como SQL injection. No caso acima, por exemplo, o usuário poderia passar um valor para o parâmetro id contendo um caractere de escape do comando da string, o que permitiria que ele executasse mais algum outro comando.

    Por exemplo, um atacante poderia passar como valor de id algo como:

    abc'; delete from accounts where 'a' = 'a

    Encaixando na consulta SQL, o comando ficaria assim:

    SELECT * FROM accounts WHERE custID=' abc'; delete from accounts where 'a' = 'a';

    O que removeria todos os registros da tabela accounts.

    Gabarito: D