Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rvlira

Problema com função anti-injection

Recommended Posts

rvlira...eis:

<?php
function removeApostrofe($string){
	$string = preg_replace("/(\'|\"|\-|\#|\*|\;|\=)/", "", $string);
	return $string;
}
$string = "' or '1=1;--";
$string = removeApostrofe($string);
echo $string; //or 11
/*foreach($_POST as $key => &$valor){
	$_POST[$key] = removeApostrofe($valor);
}*/
?>

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma dica fora a função pra anti-injection é fazer essa consulta dentro de uma stored procedure, e dentro dela.. fazer de uma forma pensando em se defender dos ataques...

 

eu fiz uma aqui no mysql que é bem simples, mas é relativamente segura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@hinom

 

Bem, sim, eu estou querendo fazer a substituição com uma linha de código (preg_replace) em vez de várias (str_replace). Então, sim, eu estou complicando. ;)

 

@Beraldo

 

Mesma coisa.

 

@Fabyo

 

Pois é. Na verdade eu até estou vendo que eu escrevi que a barra invertida funciona apenas no MySQL, mas na verdade podem haver outros que adotaram um esquema diferente, não é? Como você mesmo disse no SQL Server é igual ao MySQL. No Firebird e Oracle o escape é com apóstrofe mesmo.

 

@proust

 

Muito obrigado. Problema resolvido.

 

@Lucas Renan

 

Nossa... Excelente idéia! Esqueci das storeds.

 

Apenas gostaria de salientar que eu já tinha encontrado uma saída lá em cima na primeira função que o proust postou. Prossegui com o tópico porque, apesar de não entender de expressões regulares, sabia que era possível criar uma única expressão para o preg_replace.

 

Estou desabilitando o banco de dados que usei na página de exemplo.

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, sim, eu estou querendo fazer a substituição com uma linha de código (preg_replace) em vez de várias (str_replace). Então, sim, eu estou complicando

não tem necessidade de escapar todos os comando sql.. apenas o single quote...

 

enfim.. faça que for conveniente para o seu caso..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal!

 

Vi que o amigo citou acima essa função:

 

[/size][/font][font="arial, verdana, tahoma, sans-serif"][size="2"][color="#8D0000"][size="2"]<?phpfunction removeApostrofe($string){	$string = preg_replace("/(\'|\"|\-|\#|\*|\;|\=)/", "", $string);	return $string;}$string = "' or '1=1;--";$string = removeApostrofe($string);echo $string; //or 11/*foreach($_POST as $key => &$valor){	$_POST[$key] = removeApostrofe($valor);}*/?>[/size][/color]

[color=#8D0000]

[/color]

 

 

Uso um sistema de include para todas funções em meu sistema.. Gostaria de saber se tem alguma maneira de a função funcionar em todas consultas ao banco de dados

sem a adição da linha:

 

 

 

[/color][/size][/font][font="arial, verdana, tahoma, sans-serif"][size="2"][color="#8D0000"][size="2"]$string = removeApostrofe($string);[/size][/color]

[/size][/font][font="arial, verdana, tahoma, sans-serif"][size="2"][color=#8D0000]

 

Acho que não dá.. mas derrepente a galera sabe aí.

 

Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.