Evitando Injeções SQL
A melhor prática para evitar injeções SQL é validar e limpar as variáveis obtidas através da URL do script.
Por exemplo, se o script espera que a variável seja sempre um número, nós podemos facilmente adicionar um comando para que sejam aceitas somente variáveis numéricas. Por exemplo, no PHP poderíamos fazer algo como:
if (isset($_GET['id'])) {
$id=intval($_GET['id']);
}
If (!$id) {
header( "HTTP/1.0 404 Not Found" );
exit();
}
A função “intval” forçará a variável a ser numérica; assim, se o hacker digitar qualquer comando na tentativa de fazer uma injeção SQL, o comando simplesmente será ignorado e o script será terminado, dando uma mensagem de erro 404 (página não encontrada).
Se você espera que o conteúdo da variável seja alfanumérico, deverá colocar alguma forma de validação onde apenas os valores permitidos sejam aceitos. Um modo simples de fazer isso é com afirmações “if”, onde valores desconhecidos serão simplesmente ignorados e o código não rodará com valores desconhecidos.
Já para a situação login/senha descrita na página anterior, a ideia básica é “escapar” as aspas, portanto, caracteres como aspas simples e aspas duplas são precedidos por uma barra invertida, sendo assim ignorados (OR 1=1 será agora considerado como parte do login e da senha e não como uma cláusula separada). Em PHP, isso pode ser conseguido através de algo como:
if (isset($_POST['login'])) {
$login=addslashes($_POST['login']);
}
if (isset($POST['senha'])) {
$password=addslashes($_POST['senha']);
}
Outra prática importante para evitar injeções SQL é o uso de variáveis entre aspas nas queries. Por exemplo, em vez de:
SELECT titulo,conteudo FROM artigos WHERE id=$id;
Use:
SELECT titulo,conteudo FROM artigos WHERE id='$id';
Na verdade, se você não fizer isso, o hacker será capaz de ultrapassar o login e a senha através da adição de OR 1=1 no campo da senha, mesmo que você adicione o código para “escapar” aspas.
Existem vários outros modos de fazer uma injeção SQL e também muitas maneiras de evitá-las. No entanto, o objetivo desse tutorial era lhe familiarizar com o problema para ver se o seu site apresenta esse tipo de vulnerabilidade e não de ser um guia completo sobre o assunto.
Respostas recomendadas
Não há comentários para mostrar.
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora