-
CERTO
é o que da a entender seu conceito:
SQL Injection: é uma técnica frequentemente utilizada para atacar um site. Isto é feito através da inclusão de porções de instruções SQL em uma teia, forma campo de entrada em uma tentativa de obter o site para passar um recém-formado desonestos comando SQL para o banco de dados (por exemplo, despejar o conteúdo do banco de dados para o atacante). Injeção de SQL é uma injeção de código que explora uma técnica de vulnerabilidade de segurança no software de um site.
-
Um exemplo prático:
Digamos que você crie uma página web (digamos, em ASP) para listar os dados de um usuário, a hospedando no seu servidor web no seguinte endereço:
http://www.meuservidor.com/minhapagina.asp
, e essa sua página receba como parâmetro o código do usuário, de forma que ela seja acionada da seguinte forma:
http://www.meuservidor.com/minhapagina.asp?UserID=21
O mais simples seria montar no código do lado do servidor uma query SQL, mais ou menos assim:
"SELECT * FROM USUARIOS WHERE USERID =" + Request("UserID");
Se o hacker quiser saber mais do que os dados do seu usuário, poderia chamar sua página com MAIS do que simplesmente o código:
http://www.meuservidor.com/minhapagina.asp?UserID=21%20OR%20UserID<>21
Dessa forma, TODAS as linhas de sua tabela seriam retornadas na página, pois o conteúdo que vem depois do código 21 seria concatenado à query sem o menor critério. Bem perigoso, não??
Para evitar ataques de SQL Injection, existe mais de um método, e se recomenda usar o máximo possível.
Uma boa medida é evitar sempre que possível a exposição de parâmetros na chamada ao endereço da página. No exemplo acima, evitando que o "?Userid=21" apareça no endereço do navegador. Para isto, deve-se evitar colocar valores nos links externos que apontem para a página, além de mudar o método de envio de seus formulários HTML, de GET para POST. Outra medida, que sempre que possível deve ser usada em conjunto com a anterior, é criticar todos os seus parâmetros de página, interrompendo sua execução se algo estiver errado. Se por exemplo o valor de "Request("UserID")" não for numérico, deve-se retornar um erro; Por fim, a forma (na minha humilde opinião) mais segura de se evitar o SQL Injection é transpor suas consultas para programas armazenados no servidor de Banco de Dados (em Functions ou Stored Procedures), pois nesse caso os parâmetros já terão tipos definidos e o próprio SGBD já retornará um erro em caso de tipos incorretos. Além disso, deve-se evitar também montar consultas SQL em strings grandes dentro da procedure, para garantir a correta execução da mesma logo na compilação de seu código SQL.
Abraços e bons estudos a todos!
-
Wallace, francamente . não entendi seu comentário... você traduziu via sw?
-
CERTO.
Segundo Navathe(2011,p.577),"São técnicas de proteção contra Injeção de SQL:
-Variáveis de ligação(usando comandos parametrizados);
-Filtragem da entrada(validação da entrada);
-Segurança da função."
SISTEMAS DE BANCO DE DADOS-6 EDIÇÃO 2011-NAVATHE.
-
Na minha opinião a questão é confusa pois não tenho como fazer uma inspeção criteriosa dos dados de entrada (considerando que não tenho controle sobre o que o atacante vai escrever), mas posso evitar que um código externo seja inserido.
A visão CESPE tbm passou pela minha cabeça, fiquei em dúvida.
-
Gabarito Certo
O SQL Injection é o nome dado a uma falha na codificação de uma aplicação qualquer (seja web ou local) que possibilita, por meio de um input qualquer, a manipulação de uma consulta SQL. Essa manipulação é chamada Injeção, então, o termo Injeção SQL.
São técnicas de proteção contra Injeção de SQL:
-Variáveis de ligação(usando comandos parametrizados);
-Filtragem da entrada(validação da entrada);
-Segurança da função.
"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !