0

PHP evitando Injeção SQL

criado por Antônio Norival Ribeiro Passos em 21/07/2011 1:06pm


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.

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)