Problema com função anti-injection
Pessoal, para evitar problemas de sql e php injection estou utilizando a seguinte função para tratar tudo que o script recebe de formulários e parâmetros via query string:
function anti_injection($txt){
$txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt;
return preg_replace("@(--|\#|\*|;|=)@s", "", $txt);
}
function processaString($texto){
return anti_injection(strip_tags($texto));
}
O primeiro teste que fiz com essa função foi na página de login. No campo nome de usuário digitei:
fulano' or 1=1
No campo de login digitei:
teste' or 1=1
Na página que valida o login eu tenho:
$nome = processaString($_REQUEST['username']);
$senha = processaString($_REQUEST['password']);
$sql = "SELECT SENHA FROM USUARIOS WHERE LOGIN='".$nome."'";
#Notem que estou colocando o login entre aspas simples acima
Bem, o banco de dados que estou usando é o firebird.
Eu achava que essa função anti-injection fosse tratar toda a string passada pelo usuário como uma string, ou seja, removendo aspas simples e duplas.
Mas rodando o exemplo acima, colocando aspas simples no campo de login ou senha o script apresenta erro porque considerou a aspas simples quando deveria bloqueá-la.
Poderiam me ajudar a acertar essas funções?
Muito obrigado.
Discussão (24)
Carregando comentários...