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.