Artigo em Destaque

Backup de VMS do ESXi sem segredos

Uma das maiores preocupações dos iniciantes no mundo da virtualização é como fazer Backup das máquinas virtuais. Atualmente alguns softwares de backup estão presentes no mercado, porém com custo alto ou até mesmo tendo como pré-requisitos o licenciamento do Hypervisor. Estou apresentando uma maneira simples para fazer backup das VMs Guest do ESXi. Apresento as opções para OS Windows e Linux em NFS. (...)

Ler Mais

Solução para SQL Injection

Postado por Yuri Azambuja | Categoria: Hacking | Data: 15-12-2009

Tags: ,

0

Um dos maiores descuidos dos desenvolvedores de software ocorre ao passar os parâmetros de consultas aos bancos de dados. O SQL Injection é um método usado por Hackes para executar o comando que quiser no banco de dados do sistema, por meio de brechas.

Por exemplo, uma simples consulta aos produtos de um comércio eleterônico pode ser feita da seguinte forma:

$sql = “SELECT * FROM produtos WHERE id_produto = ‘{$_GET['id']}’;”;

Quando o visitante for acessar o endereço “produto.php?id=123″, o SQL gerado será “SELECT * FROM produtos WHERE id_produto = ’123′;”, e o resultado esperado será obtido.

Contudo, se o visitante estiver mal intencionado, ele poderá alterar o endereço no seu navegador para “produto.php?id=123′;DELETE FROM clientes WHERE ’0′=’0″, e o SQL gerado será “SELECT * FROM produtos WHERE id_produto = ’123′;DELETE FROM clientes WHERE ’0′=’0′;”, o que será interfretado pelo canco de dados como 2 comandos diferentes: Um SELECT previsto, e um DELETE que não poderia ser realizado.

Para evitar este problema, é importante utilizar funções de tratamento de string. Cada banco de dados possui a sua própria função. A seguir, segue uma função que faz os devidos tratamentos para cada tipo de variável (descomente o retorno adequado para o seu banco de dados):

function sql($valor){

if(is_bool($valor))

return $valor?”TRUE”:”FALSE”;

else if(is_numeric($valor))

return $valor;

else if(empty($valor)||is_null($valor))

return “NULL”;

if(get_magic_quotes_gpc())

$valor = stripslashes($valor);

// MySQL

//return “‘”.mysql_real_escape_string($valor).”‘”;

// PgSQL

//return “‘”.pg_escape_string($valor).”‘”;

// SQLite

//return “‘”.sqlite_escape_string($valor).”‘”;

}

Com esta função, basta reescrever o seu código da seguinte forma:

$sql = “SELECT * FROM produtos WHERE id_produto = “.sql($_GET['id']).”;”;

Escrever um comentário