Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola caros amigos do Imasters,
a pouco tempo criei uma função que evita invasões, ela funcionava perfeitamente (e continua funcionando no servidor), porém atualizei o PHP de meu localhost e me surpreendi ao descobrir que a função ereg foi marcada como 'deprecated'.
pesquisando na web descobri que devo trocá-la pela preg_match, mas não estou conseguindo efetuar essa troca... podem me ajudar?
vou deixar abaixo 3 links, com a função, o artigo que usei para criar a função e o artigo que usei para tentar resolver o problema
[]s
A funçãpo que parou de funcionar => [http://pastebin.com/gQsyn3QY](http://pastebin.com/gQsyn3QY)
Artigo ensinando a resolver => [http://blog.thiagobelem.net/problema-com-a-funcao-eregi-php-5-3-0/](http://blog.thiagobelem.net/problema-com-a-funcao-eregi-php-5-3-0/)
Artigo ao qual me baseei para criar a função => [http://vivendonaweb.blogspot.com/2010_06_01_archive.html](http://vivendonaweb.blogspot.com/2010_06_01_archive.html)>
É isso mesmo, você deve usar a função preg_match, que também é superior em desempenho comparando com a função ereg.
Qual a dificuldade que você está tendo em mudar a função? A expressão regular pode ser a mesma, a única diferença é que na função preg_match você deve usar delimitadores.
Também é possível utilizar modificadores, por exemplo, a letra "i" após a expressão regular indica que deve ser case-sensitive.
Ola Leo,
entao... pus os delimitadores. No caso '/' antes e depois da expressão. Mas deu erro... vou por aqui o código e o erro
// SQL Injection simples
//
if ( preg_match ( '//(\%27)|(\')|(\-\-)|(\%23)|(#)/ix/' , $string ) )
{
// Instanticia exceção
//
throw new Exception("Tentativa de SQL Injection simples");
}
Warning: preg_match() [function.preg-match]: Unknown modifier '(' in /home/rafael/Público/leilaoultimolance/inc/php/blb/diasComplementos/Segurança/detectaAtaque.php on line 33
Para usar a função com case-insensitive use:
$subject = "bla bla bla";
$pattern = "/ entre as barras vai o padrão de busca /i";
preg_match($pattern, $subject)
Para usar a função com case-sensitive use:
$subject = "bla bla bla";
$pattern = "/ entre as barras vai o padrão de busca /"; // apenas remova o 'i'
preg_match($pattern, $subject)
@Rafael A. R. Dias
Você tá colocando duas barras no início e uma depois dos modificadores ix.
Deveria ser assim:
if ( preg_match ( '/(\%27)|(\')|(\-\-)|(\%23)|(#)/ix' , $string ) )
@Kratos Zohr,
Valeu pela correção. No post #2 eu havia dito que o modificador "i" era pra deixar case-sensitive, quando na verdade é o contrário, para deixar case-insensitive. Já corrigi lá. ;)
É isso mesmo, você deve usar a função preg_match, que também é superior em desempenho comparando com a função ereg.
Qual a dificuldade que você está tendo em mudar a função? A expressão regular pode ser a mesma, a única diferença é que na função preg_match você deve usar delimitadores.
Também é possível utilizar modificadores, por exemplo, a letra "i" após a expressão regular indica que deve ser case-insensitive.