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


Moderador: web

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

Como fazer e como evitar o anti-injection pelo link MySQL

20-11-2014 11:16

Nesse post vou mostrar uma forma bem simples de como fazer um injection via link, e um script de como evitar injection.

Primeiramente vamos a query

SELECT * FROM suatabela WHERE id='".$_GET['id']."'

Acima uma query bem simples, que espera o id para que a consulta seja realizada.
O id deve ser passado da seguinte forma:

?id=1

Com esse id, iremos obter a linha do banco de dados que corresponde o mesmo.

Supondo que na nossa tabela temos o id 1 e o id 2, podemos fazer o seguinte pelo link:

?id=1' || id='2

Essa linha acima irá transforma a query inicial na seguinte query.

SELECT * FROM suatabela WHERE id='1' || id='2'

Como observado, através da query eu posso obter 2 registros, ao invés de somente 1, e isso somente através do link, sem acesso ao código.

Se eu tenho um script anti-injection eu posso fazer com que esse adicional || id='2' seja ignorado, preservando a consulta inicial.

Segue uma função anti-injection

function anti_injection($sql){    $sql = preg_replace("/( from |select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/", "" ,$sql);    $sql = trim($sql);    $sql = strip_tags($sql);    $sql = (get_magic_quotes_gpc()) ? $sql : addslashes($sql);    return $sql; }

Para usar a função anti-injection baseada na query do post, fazemos assim:

SELECT * FROM suatabela WHERE id='".anti_injection($_GET['id'])."'

Pode se fazer diversas coisas via injection, descobrir senhas de tabelas, apagar linhas do banco de dados, etc.

Nesse post só mostro como funciona o injection e como se proteger.
Lembrando que é possível fazer também injection via formulário.
1
A melhor hospedagem para o seu site HostGator!

Quem está online

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