DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da SQL Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Artigo SQL Magazine 23 - SQL Injection: o que é, por que funciona e como prevenir

Artigo da Revista SQL Magazine - Edição 23.

capasql23.jpg

Clique aqui para ler todos os artigos desta edição

SQL Injection: o que é, por que funciona e como prevenir

Cristiano R. Matheus

Segurança sempre foi e será um tema que preocupa todos nós, seja em casa, nas ruas ou no trabalho. Quando falamos de segurança em informática, não existe um só departamento de uma única empresa que não tenha também esta preocupação. Se questionarmos sobre segurança com desenvolvedores e DBAs, a preocupação será maior ainda, pois são justamente estes dois departamentos os principais responsáveis pelas aplicações que as empresas disponibilizam na rede local (intranet), ou global (internet). São vários os objetos dessa preocupação, mas existe um tema relativamente antigo, desconhecidos por muitos, mas com potencial devastador quando explorado: o SQL Injection, que será o assunto dessa matéria.

Plataforma utilizada

O SQL Injection é uma técnica de ataque baseada na manipulação do código SQL, que é a linguagem utilizada para troca de informações entre aplicativos e bancos de dados relacionais. Como a maioria dos fabricantes de software utiliza o padrão SQL-92 ANSI (ver Nota 1) na escrita do código SQL, os problemas e as falhas de segurança aqui apresentadas se aplicam a todo ambiente que faz uso desse padrão para troca de informações - o que inclui, por exemplo, servidores Oracle. Nesse artigo foram utilizados servidores da plataforma Microsoft: Internet Information Server, Active Server Pages e Microsoft SQL Server.

 

Nota 1. ANSI

O American National Standards Institute (ANSI) é uma organização sem fins lucrativos cuja finalidade é criar padrões de aceitação internacional sobre um determinado assunto.

SQL Injection: O que é e por que funciona

SQL Injection é uma classe de ataque onde o invasor pode inserir ou manipular consultas criadas pela aplicação, que são enviadas diretamente para o banco de dados relacional.

Por que o SQL Injection funciona?

·               Por que a aplicação aceita dados arbitrários fornecidos pelo usuário (“confia” no texto digitado);

·               As conexões são feitas no contexto de um usuário com privilégios altos.

 

Para entendermos um pouco melhor o que é SQL Injection e por que funciona, vamos analisar exemplos práticos.

Ataques pela tela de logon

A técnica mais simples de ataque que explora SQL Injection é a que “engana” o formulário login de uma aplicação. Suponha que uma determinada aplicação web faça uso do código exibido na Listagem 1, em que o usuário digita seu nome e senha.

 

Listagem 1. Código de um formulário de uma aplicação web onde o usuário digita nome e senha.

listagem1.jpg 

 

A Figura 1 ilustra como este formulário é exibido para o usuário

 

img1.jpg 

Figura 1. Tela de Login onde o usuário digita nome (Username) e senha (Password).

 

 

O código presente na Listagem 2 mostra como a informação digitada pelo usuário será processada na aplicação web.

Listagem 2. Código de validação de usuário e senha

listagem2.jpg

 

Ao digitar o nome e senha (ver Figura 1), a aplicação web dispara uma consulta na tabela “USERS” para confirmação do cadastro do usuário. Se um registro for encontrado, o username será retornado e esta é a confirmação de que o usuário foi autenticado com sucesso. Se a consulta na tabela “USERS” não retornar registros, o usuário não será autenticado.

O principal problema do código da Listagem 2 é o trecho responsável pela montagem do comando sql que será executado (ver Listagem 3).

Listagem 3. Código que concatena o comando sql a ser executado

var sql = "select * from users where username = '" + username + "' and password = '" + password + "'";

 

Este código é problemático porque não realiza nenhum tipo de validação nos dados que foram digitados pelo usuário. Isso permite que  um usuário mal intencionado, que conheça somente o nome de um usuário válido, consiga “burlar” a digitação da senha informando os seguintes parâmetros na tela de autenticação (ver Listagem 4 )

Listagem 4. Parâmetro para login sem a necessidade de especificar a senha.

Username: admin'--

Password:

 

"



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da SQL Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Equipe Devmedia

Noticias/Dicas/Artigos publicados.




Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03