Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17616
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Usar e se proteger do injection MySQL

30-10-2010 13:21

Nesse artigo estarei mostrando um exemplo simples de como obter todos os dados de determinado banco de dados MySQL fazendo um injection, e por último, como fazer um anti-injection para proteger o banco de dados.

Vamos observar o código abaixo

<?php $db = mysql_connect("localhost", "login", "senha") or die("Could not connect."); if(!$db) die("no db"); if(!mysql_select_db("bd",$db)) die("No database selected."); extract($_POST); $selec = "SELECT * FROM cor WHERE cor='$cor'"; $exec = mysql_query($selec, $db) or die(mysql_error()); while($campos=mysql_fetch_array($exec)) { extract($campos); echo $cor; } ?>


<form method="post"> <input type="text" name="cor" value="Azul"> <input type="submit"> </form>

Observe na consulta, que peço para mostrar somente as linhas da tabela cor, onde a cor for igual a que eu passar no input, no caso Azul

Agora, teste o mesmo código acima, colocando como valor do input o seguinte: ' OR 1=1 #

Isso vai fazer com que liste todos os itens da coluna cor, ignorando o script anterior, onde só retornava os itens de cor Azul

O # que tudo a seguir após ele será comentário, e será ignorado.

Dessa forma, se fosse um sistema de login, onde a consulta fosse:

SELECT * FROM dados WHERE login='$login' AND senha='$senha'

eu iria obter uma lista com todos os logins da tabela dados.

Há diversas formas de usar o injection para obter diversos tipos de dados.

Essa é uma forma de obter os dados de um banco de dados, agora, para proteger-se, basta eliminar-mos alguns caracteres chave do valor que foi passado.

Para proteção, usaremos essas 2 linhas, que irá pegar os termos perigosos e eliminá-los

$variavel = str_replace(" OR ", "", $variavel); $variavel = str_replace(" 1=1 ", "", $variavel); 

Outra forma simples é usar a seguinte função

$variavel = mysql_real_escape_string(trim($variavel)); 

0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado