11.12
A conversão de tipo de dados ou como muitos conhecem como “casting” , é uma técnica muito eficaz no PHP contra ataques de sql-injection, pois com isso podemos facilmente transformar uma variável do tipo A para o tipo B, sem precisarmos nos preocupar com grandes dificuldade para realizar essa operação. A fim de proporcionar segurança extra ou apenas para certificar-se de um tipo de conjunto de dados está sendo usado, essa técnica é frequentemente utilizada por programadores PHP(pelo menos os que eu conheço).
1 <?php2 //string em sua forma normal3 $string = "http://salsotto.com";4 //conversao para um numero inteiro5 $string = (integer)$string;6 ?>
No exemplo acima vimos um exemplo sem nenhum propósito, mas imagenemos o seguinte, e se essa string obrigatoriamente tivesse que ser um número, como por exemplo o id de um usuario em uma requisição utilizando o método $_GET, deixariamos passar um outro valor que não fosse um número? Pense na master brecha que o seu sistema está dispondo para pessoas mal intencionadas, pois com isso facilmente seu sistema sofrerá um ataque de sql−injection. Para tanto, veremos um outro exemplo:
1 <?php2 //imaginemos que o valor venha de um $_GET e o valor é 'OR 1=1'3 $user = 'OR 1=1' ;4 //realizamos a conversao obrigatoria para um numero inteiro5 $user = (integer)$user;6 ?>
Com isso, se alguma pessoa mal intencionada colocar uma string como parâmetro, ela automaticamente será convertida para um número inteiro, onde com isso já previnimos que o nosso sistema não aceite outro valor como parâmetro ao não ser um número inteiro, pois todo número inteiro de uma string é ZERO e assim basta realizarmos uma verificação após o casting.
É importante frisar, que só isso não resolve para a segurança do seu sistema, pois aqui só mostrei como forçar a conversão de tipos de variáveis juntamente imendando com uma dica de segurança.
Uma coisa bem interessante quando se trabalha com parametros de querystring no formato númerico é o uso de expressões regulares para tratamento de dados:
Ex: $id = preg_replace(’/[^\d]/’, null, $id);
Abraços