May 31
Digg
Stumbleupon
Technorati
Delicious

Função recursiva para evitar Sql Injection

Sempre gostei de fazer funções recursivas e quando posso tento utilizá-las pois acho charmosas e economizam código mas elas requerem um pouco mais de raciocíonio e atenção devido a facilidade de se criar loop/laço infinito.

A primeira função recursiva você nunca esquece. Eu lembro que a minha primeira foi uma implementação de um rm -rf em PHP.

A função recursiva que está logo abaixo é útil quando se tem um site vulnerável a Sql Injection por falta de crítica dos dados ou por causa da diretiva register_globals estar habilitada. Eu fiz e nunca mais precisei dar manutenção nessa função mas se precisarem é só falar.

<?php
function escape($var)
{
	if (!is_array($var)) {
		if(get_magic_quotes_gpc() == 1)
			$var = stripslashes($var);
		return mysql_escape_string($var);
	}
 
	foreach ($var as $chave => $valor)
		$var[$chave] = escape($valor);
 
	return $var;
}
?>

Seu funcionamento é muito simples.

1 - Receber Argumento.
2 - Se o argumento não for um array ele deverá ser escapado e retornado.
3 - Caso contrário o elemento é um array.
3.1 - Logo a função escape() deverá ser chamada para cada elemento do array.
3.2 - O resultado da chamada da função escape() deverá ser salvo na posição em que estava o elemento.
3.3 - O array deverá ser retornado com os seus elementos escapados.

O modo de usar essa função é muito simples e é orientado que seja chamada antes das queries que recebem valores externos.

<?php
// Escapando variáveis passadas por GET
$_GET = escape($_GET);
// Escapando variáveis passadas por POST
$_POST = escape($_POST);
?>

Exemplo de array escapado com essa função:

array (
  'select' => 
  array (
    0 => 'car',
    1 => '1 or \\\'\\\'',
  ),
)

Author: Noel Rocha

2 Comments

Noel Rocha
May 31, 2009

Essa função permite a utilização de aspas simples(’) e aspas duplos(”) nos campos do formulário sem que isso interfira no funcionamento do script.

Cassio
June 1, 2009

Excelente função Noel.

Seu rm -fr ainda é muito útil pra quem tem o seu script e eu mesmo o utilizei diversas vezes.

Continuamos acompanhando o seu blog.

[]’s

Comments RSS TrackBack Identifier URI

Leave a comment