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.

[ Hits: 22.665 ]

Por: Mario Monteiro em 08/07/2008


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.

    Próxima página

Páginas do artigo
   1. Ataques
   2. Como evitar ataques
Outros artigos deste autor

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

Leitura recomendada

Entendendo o LDAP

MongoDB Aggregation

Gerencie suas informações através de instruções SQL com selects turbinados (para leigos e experts)

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

Instalando o poderoso banco de dados IBM DB2!

  
Comentários
[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!!

[2] Comentário enviado por xKuRt em 08/07/2008 - 11:56h

Ficou bem básico, mas contém algumas noções legais sobre o assunto.

Gostaria de sugerir uma leitura complementar:

Segurança em programação PHP
Parte 1 - http://www.htmlstaff.org/ver.php?id=1356
Parte 2 - http://www.htmlstaff.org/ver.php?id=1357

[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.

[9] Comentário enviado por willium532 em 18/11/2022 - 05:38h

I am also looking for a solution, Because I am also getting a same issue. Please help!!!
https://www.ariseportal.org/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts