Pular para o conteúdo

Injeção de SQL

Ao desenvolvermos uma página web com acesso ao banco de dados (BD) utilizamos queries SQL que fazem consultas a BD através de SGBDs como MySQL, Postgree etc. Estas consultas muitas das vezes não são confiáveis, podem ser manipuladas e passar por controles de acesso, podendo até ter acesso ao shell do servidor.
Mario Monteiro mtutucv
Hits: 24.094 Categoria: Banco de Dados Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar

Ataques

A técnica que é utilizada com queries SQL é chamada de Injeção SQL, cujo ataque contiste em criar ou alterar comandos SQL introduzidos na página desenvolvida para apresentar dados guardados no banco de dados.

Pode também alterar dados importantes ou ainda executar comandos de sistema perigosos no servidor. Isso é realizado nas caixas de textos colocados na página que espera a entrada de um utilizador para realizar queries no BD. Lá são introduzidas queries adicionais com intensão de atacar as informações do BD.

Para melhor entender o que é injeção SQL, o exemplo seguinte permite ver isso: imaginemos que para validar o acesso ao sistema foi desenvolvido o seguinte script:

<?php
$utilizador = $_POST['util'];
$password = $_POST['pw'];
$sql = "SELECT * FROM utilizador WHERE username='$utilizador' AND password='$password'";
?>

As variáveis $utilizador e $password recebem o conteúdo enviado do formulário através do método POST, é aí que se encontra o perigo. Suponha que a seguinte entrada foi enviada no formulário:
  • util - pode ser enviado campo vazio; é recebido pela variável $utilizador;
  • pw - pode ser enviado o texto ' or 1='1; é recebido pela variável $password.

A query que vai ser executada vai sofrer modificações ficando da seguinte forma:

$sql="SELECT * FROM utilizador WHERE username='' AND password='' or 1='1' ";

Se não for realizada qualquer validação sobre os textos enviados nos formulários para verificar tal situação, qualquer utilizador mal intencionado pode obter acesso ao sistema. Esse é um exemplo muito simples de ataque.

Existem ataques mais complexos, deve haver uma verificação mais consistente dos dados enviados no formulário para o acesso e consultas ao BD.

   1. Ataques
   2. Como evitar ataques

Listar dados em MySQL utilizando PHP e AJAX (parte 1)

Instalação da Plataforma Hadoop

OpenAI - Como usar uma Inteligência Artificial a seu favor

Implementação LDAP e Java

Instalando o poderoso banco de dados IBM DB2!

Entendendo o LDAP

#1 Comentário enviado por skywishrfz em 08/07/2008 - 10:29h
Legal o artigo!

Se não tiver acesso ao php.ini, pode também usar a função

error_reporting(null) pra nao exibir as mensagens de erro!

outra dica é hashar a senha antes de enviar o sql tipo

com md5(), sha1(), ou mesmo o crypt();

flw!!
#3 Comentário enviado por aprendiz_ce em 08/07/2008 - 13:21h
Apesar de resumido... é nota 10!!! Vale pelo alerta.

Parabéns pelo artigo!

#4 Comentário enviado por guinter em 08/07/2008 - 17:20h
Ficou bom o artigo apesar de estar bem básico. Abraços!
#5 Comentário enviado por ruhanbidart em 08/07/2008 - 22:07h
Resumido, simples e básico mas bem legal! Parabéns.
#6 Comentário enviado por mtavares em 15/07/2008 - 18:39h
Realmente é básico, pois há muitas outras técnicas e especificidades. Para já um tema interessante visto que muitos de nós que programamos ou não temos conhecimento acerca ou não preocupamos até alguém invadir e aí é feio. Parabéns pelo artigo.
Vou esperar pela "2ª parte".
#7 Comentário enviado por carlosdias98 em 07/09/2008 - 01:20h
ótimo artigo
#8 Comentário enviado por Dieh em 03/11/2011 - 10:47h
Artigo simples, prático e bom.

Contribuir com comentário

Entre na sua conta para comentar.