Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Salvando a pele do Programador php - SQL injection
Colaboração: Altemir Braz Dantas Junior
Data de Publicação: 02 de fevereiro de 2011
São poucos os programadores que pensam em "Segurança" quando estão desenvolvendo suas aplicações. Vou passar uma dica que salvará esse programadores rsrsrsr.
Então vamos lá, primeiramente crie um arquivo php contendo as seguintes linhas:
ex: security.php
<?php
/*
aqui vai varrer todos os REQUEST,POST e GET e jogar o seu valor para
função limpa_sqlinjection, e retornar para o proprio REQUEST,POST e GET.
*/
foreach ($_REQUEST as $index=>$valor){
$_REQUEST[$index] = limpa_sqlinjection($valor);
}
foreach ($_GET as $index=>$valor){
$_GET[$index] = limpa_sqlinjection($valor);
}
foreach ($_POST as $index=>$valor){
$_POST[$index] = limpa_sqlinjection($valor);
}
function limpa_sqlinjection($var){
/*
aqui você pode colocar todas as formas de proteção que você ja utiliza
para seu banco de dados contra sql injection, vou colocar um exemplo
que é a função mysql_real_escape_string
*/
$var = mysql_real_escape_string($var);
// caso nao tenha a function mysql_real_escape_string use a mysql_escape_string
return $var;
}
?>
Agora é só dar um include desse arquivo na lib principal ou em todos os arquivos php que recebem POST,GET ou REQUEST, assim todas essas formas estarão protegidas mesmo que o programador esqueça de filtrar.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
08 Fev 2011, 11:55
Concordo com vcs seria interessante que os programadores soh filtrassem as variaveis que fossem para o sql para nao gerar processamento desnecessário, porem imagina se o programador esquece de filtrar em uma só sql dele essa pagina estaria vulneravel, assim com essa dica salvaria essa situação.
[]s
Altemir Braz Dantas Junior
08 Fev 2011, 11:44
$_REQUEST não é equivalente a qualquer $_POST e $_GET ?
Sim o $_REQUEST é equivalente porem como estou vazendo array e criando a propria novamente com o mesmo nome ela nao substitui o outro metodo faça um teste simples:
<?php
$_REQUEST["teste"] = 1;
echo $_GET["teste"]."/".$_REQUEST["teste"];
?>
agora chame este arquivo teste.php?teste=testando
vc vera que ele nao alterou o valor do $_GET["teste"] e criou outra variavel chamada $_REQUEST["teste"]
ele ira imprimir
testando/1
agora vamos fazer outro teste simples
<?php
$_GET["teste"] = 1;
echo $_GET["teste"]."/".$_REQUEST["teste"];
?>
agora chame este arquivo teste.php?teste=testando
ele ira imprimir
1/testando
Entao como nao sei qual variavel o programador vai ultilizar
na sql dele GET ou REQUEST fiz em todas as variavei possivel que ele possa ultilizar
Nao sei se consegui explicar direito
[]s
Altemir Braz Dantas Junior
04 Fev 2011, 17:55
04 Fev 2011, 11:34
03 Fev 2011, 20:57
$_REQUEST não é equivalente a qualquer $_POST e $_GET ?
seu código não será processado pelo menos duas vezes e trará o mesmo resultado?
02 Fev 2011, 11:36
Primeiro não é necessário criar uma função, ela já existe no php, basta chama-lá quando necessário.
Segundo se isso fosse bom e recomendável o php já viria com isso implicito e não existiria uma função.
Terceiro se o programador quer produtividade e segurança há dezenas de frameworks que fazem isso de forma mais rápida eficiente e transparente(Code igniter, CakePHP, Symfony, Zend Framework).
02 Fev 2011, 08:31
E terminando num gasto de processamento desnecessário, onde só devemos tratar as variavas que iremos utilizar e não todas!




