você está aqui: Home  → Arquivo de Mensagens

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.



Veja a relação completa dos artigos de Altemir Braz Dantas Junior

 

 

Opinião dos Leitores

Altemir Braz Dantas Junior
08 Fev 2011, 11:55
Respondendo ao Ricardo e ao Caio

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
Altemir Braz Dantas Junior
08 Fev 2011, 11:44
Respondendo ao Rogerio Machado

$_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




Ricardo Coelho
04 Fev 2011, 17:55
Vale a pena dar uma olhada: http://php-ids.org/
Eviston Borges
04 Fev 2011, 11:34
Para o caso do postrgres utilize pg_escape_string.
rogerio machado
03 Fev 2011, 20:57
Sou iniciante em PHP mas uma coisa me chamou atenção:

$_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?
Ricardo
02 Fev 2011, 11:36
Realmente falho, você colocará uma carga enorme no seu código desnecessáriamente.
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).
Caio Costa
02 Fev 2011, 08:31
Desculpem, mas tem varios problemas com esse tratamento, começando por qualquer array que venha do request/post/get.
E terminando num gasto de processamento desnecessário, onde só devemos tratar as variavas que iremos utilizar e não todas!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script