Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Josuel S.H

[Resolvido] Consulta MySQL

Recommended Posts

olá a todos do forum

 

tenho um sistema que faz consultas no banco de dados (MySQL) para exibir os resultados

 

mas descobrir que ele esta vulneravel a sql injection

 

a linha vul é essa

 

mysql_query("select * from $nometabela where id=$id",$conexao);

como vocês podem ver é a linha principal da consulta

 

mas bem ali em "$id" ali que esta a vulnerabilidade que permite a pessoa fazer consultas atravez de comandos digitados na url, ou seja aquele "$id" ele pega da url o que esta depois da "id="

 

então, tipo como fazer para ele pegar apenas os números que ficam depois do "id="?

 

alguém sabe como fazer pra não ficar vulneravel?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá a todos do forum

 

tenho um sistema que faz consultas no banco de dados (MySQL) para exibir os resultados

 

mas descobrir que ele esta vulneravel a sql injection

 

a linha vul é essa

 

mysql_query("select * from $nometabela where id=$id",$conexao);

como vocês podem ver é a linha principal da consulta

 

mas bem ali em "$id" ali que esta a vulnerabilidade que permite a pessoa fazer consultas atravez de comandos digitados na url, ou seja aquele "$id" ele pega da url o que esta depois da "id="

 

então, tipo como fazer para ele pegar apenas os números que ficam depois do "id="?

 

alguém sabe como fazer pra não ficar vulneravel?

 

Crie uma função que retire todas as possiveis entradas de sql injection

permitindo somente numeros

use a função str_replace..ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo tava pensando aqui pra fazer tipo assim

 

se o que vem depois do "id=" for igual a inteiro ele abre a pagina normalmente, caso não seja ele retona falando que tipo "Ex: ID Invalido"

 

ou se o quem depois do "id=" ele verifica se aquele id existe no banco de dados, se existir ele abre normalmente, caso não exista || || ||

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer como você quer, tem uma função... is_numeric.

 

você pode fazer mais ou menos assim

if (is_numeric($id)) {
// coloca tudo que é pra fazer aqui dentro

} else {
	echo 'ID Inválido';
}

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ali era só um exemplo...

 

Mas vamos lá... hoje estou com paciência... O seu código deve estar mais ou menos assim

$id = $_GET['id'];
if (is_numeric($id)) {
	mysql_query("select * from $nometabela where id=$id",$conexao);// daí você coloca todo o restante do teu código dentro do if.

} else {
	echo 'ID Inválido';
}

O is_numeric "Informa se a variável é um número ou uma string numérica. Retorna TRUE se var é um número ou uma string numérica, FALSE caso contrário." Fonte: br.php.net/is_numeric

 

Então se o conteúdo da $id for numérico, ele vai retornar true e vai entrar no if. Se não for numérico (tentativa de SQL Injection) vai retornar false e vai cair no else.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

valew a todos, conseguir fazer de um outro geito aqui

 

mas também valew ai matias_rezende, não deu pra mim fazer do seu geito por que quando eu vim ver o topico ja tinha feito, mas valew ai pela força :D

 

mas do geito que eu fiz é parecido com o seu ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

po cara

 

pensei que tinha conseguido kkkkkkkkkkkk...

 

mas não conseguir :D

 

tentei fazer esse seu mas também não deu

 

tipo

 

$id = $_GET['id'];
if (is_numeric($id)) {
	mysql_query("select * from $nometabela where id=$id",$conexao);// daí você coloca todo o restante do teu código dentro do if.

} else {
	echo 'ID Inválido';
}

antes da linha "if (is_numeric($id)) {"

 

num teria que ter um "Select * From TABELA...."?

 

olha como que eu tinha feito mas não funcionou muito bem

 

$conn = @mysql_connect("localhost", "**********", "**********") or die("Não foi possível a conexão com o Banco");

$db = @mysql_select_db("***********", $conn) or die("Não foi possível selecionar o Banco");

$verificaid=$_GET['id'];

$sql = mysql_query("SELECT * FROM `TABELA` WHERE `id` LIKE '%".$verificaid."%'");

$numRegistros = mysql_num_rows($sql);

if ($numRegistros != 0) {
  echo " id n existe ";

} else {

//Script quando ocorrer tudo certo!

}

mas ai fica dando erro na linha 17 que é essa linha aqui

 

$numRegistros = mysql_num_rows($sql);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondendo...

antes da linha "if (is_numeric($id)) {"

num teria que ter um "Select * From TABELA...."?

Não.

 

O que faz a função que eu te mandei???? Testa se a $_GET['id'] é um número. Se for um número, executa a query e faz tudo o mais. Se o cara tentar fazer SqlInjection, o que ele vai colocar ali não vai ser um número... E aí vai retornar FALSE, vai cair no ELSE e você vai estar "livre".

 

Acho que é importante que você leia este tópico para entender um pouco mais sobre Sql Injection. Link

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.