Sabemos que no mundo real não existem sistemas totalmente seguros e o mundo virtual segue o mesmo preceito. Por maior que seja a proteção adotada, estaremos sempre sujeitos a invasões, roubos e ataques. Então é importante que conheçamos o perigo e saibamos como nos proteger. Por isso fique ligado nos artigos que serão postados e adquira mais conhecimento sobre esse importante assunto.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8YjR2GuFqeDkQe7jGJ3SRgK70DpBpG6cJiXC_IRZJ9nBrzsuLra0UGXzXk21S0gmrCtcEEM48K5-cMpoHqC1xRdthG1r07UXCjN1XzZhKATIaOKhvTYIdjVQwMABlKqe-FKH-jymNB4zL/s748/Laptop-Security-WEB-MAILER1.jpg)
domingo, 12 de dezembro de 2010
Vulnerabilidades - Parte 2: SQL Injection
Olá pessoal,
Agora vou falar de outra vulnerabiliade das Aplicações Web: SQL Injection
O que é?
A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. 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 entrada de dados de uma aplicação.
Funcionamento
Para exemplificar o funcionamento da injeção de SQL, consideremos uma instrução SQL comum:
SELECT id, nome, sobrenome FROM autores;
Essa instrução, que representa uma consulta na base de dados, retorna todas os registros das colunas "id", "nome" e "sobrenome" da tabela "autores". A partir desta mesma instrução, os registros a serem retornados podem ser restritos através da inclusão da cláusula WHERE, como é visto no exemplo abaixo:
SELECT id, nome, sobrenome FROM autores WHERE nome = 'josé' AND sobrenome = 'silva';
Com base nesta instrução, é fácil supor que "josé" e "silva" são strings, cujo conteúdo será preenchido pela entrada feita por algum usuário que estiver fazendo uso da aplicação.
Portanto, supondo que a aplicação não faça o tratamento apropriado do conteúdo inserido pelo usuário, o mesmo pode fazer o uso acidental do caractere de aspas simples ou maliciosamente atacar o sistema, veja o exemplo:
- nome = jo'; DROP TABLE autores ; --
- sobrenome = silva
Fazendo com que a aplicação gere o código:
SELECT id, nome, sobrenome FROM autores WHERE nome = 'jo'; DROP TABLE autores ; --' AND sobrenome = 'silva';
Neste caso, a instrução será executada normalmente, pois não há um erro de sintaxe, no entanto, com a adição do caractere ponto-e-vírgula, a instrução foi dada como finalizada de modo prematuro dando espaço para uma nova instrução. Essa nova instrução, que poderia ser qualquer uma escolhida pelo atacante, pode ser a responsável por retornar dados confidenciais armazenados na base de dados ou de executar instruções que comprometam o sistema, como a remoção de dados e/ou tabelas, como pode ser visto no exemplo apresentado.
Outro exemplo: Logando sem permissão
Entradas do usuário
- nome = louco' OR 1=1 ; --
- sobrenome =
Supondo que este seja o comando que verifica se o usuário existe e se a senha está correta.
Fazendo com que a aplicação gere o código:
SELECT id, nome, sobrenome FROM autores WHERE nome = 'louco' OR 1=1 ; --' AND sobrenome = '';
a partir de "--" o comando se torna inválido pois estes caracteres são usados para criar comentários, o que interpretador vai executar será o seguinte comando:
SELECT id, nome, sobrenome FROM autores WHERE nome = 'louco' OR 1=1;
como 1 é igual a 1, então o login será autenticado com sucesso.
Uma simples solução:
Aparentemente um método para prevenir esse problema seria a remoção de aspas simples dos campos de inserção da aplicação, ou simplesmente não executando a query nestas situações. Isso é verdade, mas existem várias dificuldades com esse método tanto quanto soluções.
Então é isso pessoal, muito cuidado com as SQL Injection.
abraços,
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário