PHP evitando Injeção SQL
Por: Antônio Noriva Ribeiro Passos
Contato: tonhopassos@gmail.com
Abaixo segue um Código que parace seguro até que o conheça e faça valer o contrário.
<?php
include("conexao.php");
$login = "admin";
$senha = "********";
$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";
$busca = "SELECT * FROM tabelaLogin WHERE login = 'admin' OR 1 and senha = '********'";
// ateh aqui pode se observar que esta tudo ok
// o autenticacao vai acontecer normalmente pois foi fornecido o login e a senha de forma correta
//-------------------------------------------------------------------------------------------------------------------------
// mais digamos que eu nao tenha a senha e use o login = "admin" entao eu ja tenho 50 porcento de chance e
// agora soh falta advinhar a senha certo ?
// R: ERRADO se o site esta vuneravel a Injecao SQL eu praticamente ja tenho 100 porcento.
$login = "admin";
$senha = "' or '1=1";
$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";
$busca = "SELECT * FROM tabelaLogin WHERE login = 'admin' OR 1 and senha = '' or '1=1'";
// por Logica o que se pode observar eh admin E nada OU 1 = true
// V E F OU V = V
// a busca vai retorna verdadeiro o seja Logado como ADMIN
// isso para facil porque ja tem o login = admin, na verdade login nem eh necessario
$login = "' or '1=1";
$senha = "' or '1=1";
$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";
$busca = "SELECT * FROM tabelaLogin WHERE login = '' or '1=1' OR 1 and senha = '' or '1=1'";
// por logica denovo nada OU 1 E nada OU 1 = true
// F OU V E F OU V = V
// denovo Logado sem a necessidade de nenhum dado de acesso
//-------------------------------------------------------------------------------------------------------------------------
Uma forma bastante que ajuda eh limitar no formulario o tamanho dos campos Login e Senha
Outra maneira que realmente funciona eh filtrar todos dados retirando aspas simples, duplas, espacos em branco
barras e tudo que nao seja digito e numero antes de inseri-los em uma busca sql.
// retira os codigos html do login e retira as aspa simples
$login = str_replace("'","",strip_tags($login));
// retira os codigos html da senha, retira as aspa simplese criptografa antes de compara-la no banco de dandos
$senha = crypt(str_replace("'","",strip_tags($senha)));
//Agora sim pode se dizer que o codigo esta um pouco seguro.


Novo Comentário: