sexta-feira, 24 de setembro de 2010

Como armazenar dados no BD sem correr o risco de sofrer sql injection inclusive aspas simples, duplas e tags?


As vezes é preciso guardar fielmente os dados que o usuário passa para seu banco de dados para depois devolve-lo da forma que ele postou e se você simplesmente deixar-lo livre para inserir os dados de qual quer maneira um usuário com espírito de porco pode simplesmente apagar toda a tabela onde fica armazenado esses dados utilizando técnicas de sql injection então
Para fazer tal coisa sem correr riscos é muito simples basta aplicar uma criptografia nos dados antes de inserir no banco de dados caso tenha alguma tag que você queira eliminar(impedir o seu uso) basta usar as expressões regulares para fazer isso então vamos lá.


O script completo no está final do post

Vou disponibilizar a função anti_sql_injection de duas maneiras uma que elimina as tags indesejáveis e uma outra caso você queira que a tag não seja executada mas que apareça como a pessoa digitou nos 2 exemplos vou utilizar a tag <script> </script> como indesejada mas você pode colocar quantas tags quiser como indesejada.


Primeiro temos essa que mentem a tag mas não a utiliza.
<?php
function anti_sql_injection ($str) {
 $str = preg_replace("[<script>]", "&lt;script&gt;", $str);
 $str = preg_replace("[/<script>]", "&lt;/script&gt;", $str);
 $str = base64_encode($str);   
 return $str;
}
?>
No exemplo acima se você digitar <script> alert("1") </script> <strong>O rato roeu a roupa do rei de roma</strong> o resultado será:
<script> alert("1") </script> O rato roeu a roupa do rei de roma
Depois temos essa que elimina as tags indesejadas
<?php
function anti_sql_injection ($str) {
 $str = preg_replace("[<script>]", "", $str);
 $str = preg_replace("[/<script>]", "", $str);
 $str = base64_encode($str);   
 return $str;
}
?>
No exemplo acima se você digitar <script> alert("1") </script> <strong>O rato roeu a roupa do rei de roma</strong> o resultado será:
alert("1") O rato roeu a roupa do rei de roma

Para reverter a operação e mostrar ao usuário é so chamar a função TrataDados($str)

<?php
function TrataDados($str) {
  
 $str = base64_decode($str);
 return $str;
}
?>


Código completo

Nenhum comentário:

Postar um comentário

Related Posts with Thumbnails