Ir para conteúdo
Fórum Script Brasil
  • 0

Function Anti_injection


fsphp

Pergunta

Coloquei num sistema de login meu, a função que o Fabyo fez function anti_injection(), que está lá no tópico suspenso de scripts e achei ela muito boa.

Gostaria de lembrar que, como não estou usando o php 5, a função str_ireplace() não é aceita pelo php 4, com isso, no lugar delas temos que colocar o str_replace em minúsculo e maiúsculo, por exemplo:

$string = str_replace("delete", "", $string);

$string = str_replace("DELETE", "", $string);

ETC....

Só fiquei com uma dúvida no final, no foreach. Lá está assim:

foreach($_POST as $campo => $valor){ $$campo = anti_injection($valor);}

Eu fiz funcionar com um e com dois $, qual a diferença? Para que um e outro? blink.gif

Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

foreach($_POST as $campo => $valor){ $$campo = anti_injection($valor);}

ele cria uma variavel com o mesmo nome do campo do formulario

vamos supor que você tive-se 20 campos no formulario exemplo:

<input type="text" name="nome">

<input type="text" name="senha">

<input type="text" name="telefone">

<input type="text" name="email">

etc...

no modo tradicional você pegaria assim:

$nome = $_POST["nome"];

$senha = $_POST["senha"];

$telefone = $_POST["telefone"];

$email = $_POST["email"];

etc...

certo?

então usando essa funçãoforeach($_POST as $campo => $valor){ $$campo = $valor;}

ela pega os dados vindos do formulario e já cria a variavel com o mesmo nome

<input type="text" name="nome"> $campo = $nome $valor é o nome que você vai digitar la no form

e $$campo vai criar a variavel $$campo = $nome

dai você não precisaria mais pegar cada campo com o $_POST pois já foram pegos no loop

e só usar a $nome direto no seu script e pronto

foreach($_POST as $campo => $valor){ $$campo = $valor;}

echo $nome <= aqui a $nome já existe e pode ser usada

também é muito util fazer assim quando você precisa passar os dados do form tipo por um filtro ou outra função qualquer

foreach($_POST as $campo => $valor){ $$campo = funcao($valor);}

deu pra entender ? senao posta ai

Link para o comentário
Compartilhar em outros sites

  • 0

01- Quer dizer, então, que com essa função eu não preciso declarar as supeglobais no início pois essa função já faz esse papel? Foi isso que eu entendi.

02- E com relação a eu ter feito funcionar com um sinal de variável "$" foi devido ao fato de eu ter declarado as super globais $_POST no início de meu script?

Link para o comentário
Compartilhar em outros sites

  • 0

1- na verdade voce nunca declara superglobais ne cara? elas já são declaradas por padrão, mais com esse script voce não precisa ficar declando variavel por variavel que vem do form..

$nome = $_POST['nome']

---

esse script faz isso, voce apenas usa a variavel

$nome

entendeu?

---

2- o error já explicou o porque do $$, posso ter entendido errado, mais pelo que entendi, aquli dentro do looping serve para modificar o nome da variavel

exemplo:

se o primero campo é nome e o segundo é email

a variavel ficaria:

$nome = "iria ficar mudando apenas o valor"

entendeu?

se eu não fui muito claro eu posto de novo

falou

ps: error, se eu estiver errado, por favor me corrija

Link para o comentário
Compartilhar em outros sites

  • 0

Pelo que eu sei, quando você passa variáveis por formulários você tem que declarar sim. Tem que declarar todas elas assim:

$nome = $_POST['nome'];

$email = $_POST['email'];

etc...

E a minha outra dúvida não foi com a passagem do operador de variável ($) para o valor da array, ela foi a seguinte:

com relação a eu ter feito funcionar com um sinal de variável "$" foi devido ao fato de eu ter declarado as super globais $_POST no início de meu script

Acho que funcionou por isso que eu comentei aí. Se alguém souber se isso está certo eu gostaria de confirmar.

Link para o comentário
Compartilhar em outros sites

  • 0

não sei se eu fui bem claro no post anterior mas

só você reparar não tem necessidade de você usar isso:

$nome = $_POST['nome'];

$email = $_POST['email'];

olha porque:

foreach($_POST as $campo => $valor){ $$campo = $valor;}

ali no loop já esta sendo usado $_POST ou se pode usar $_GET se for o caso

por isso não precisa pegar denovo só usar a variavel direto

e a $$ é simples testa ai

$nome = "fabyo";

$$nome = "Moderador";

echo $fabyo;

se entendeu ?

Link para o comentário
Compartilhar em outros sites

  • 0

aqui não funcionou perfeitamente, não teve o mesmo efeito que o $_POST["var"];

por exemplo, no form tem um campo chamado nome

ai na página que recebe esse campo você digitar na url

nomepagina?nome=teste

e der um

echo $_POST["nome"];

ele não exibe "teste" na tela, já com o foreach ele exibe..

então acaba-se perdendo o recurso do post que não permite o usuário "pular" o formulário....

Link para o comentário
Compartilhar em outros sites

  • 0

nomepagina?nome=teste <= mas assim é GET dai teria que usar $_GET

e se você digitar na url nomepagina?nome=teste e dar enter ele não vai pois não tem o mesmo efeito que o submit do form

pois não mudou nada com

foreach($_POST as $campo => $valor){ $$campo = $valor;}

é apenas um loop usando a mesma função $_POST não tem diferença em usar separado

só tem a vantagem de otimizar a pagina e diminuir linhas

Link para o comentário
Compartilhar em outros sites

  • 0

Eu entendi sim, e acho que com um ou dois sifrões na variável campo funcionou igual pois, como eu já havia declarado $_POST anteriormente, ela foi passada nessa declaração.

No outro jeito eu acabava declarando ela duas vezes, uma no início e outra no foreach, o que acabva funcionando do mesmo jeito.

Da forma como você colocou, o foreach já faz esse papel e, nesse caso, as $_POST já estão sendo declaradas, NÃO SENDO NECESSÁRIO DECLARÁ-LAS NOVAMENTE.

Link para o comentário
Compartilhar em outros sites

  • 0
nomepagina?nome=teste <= mas assim é GET dai teria que usar $_GET

e se você digitar na url nomepagina?nome=teste e dar enter ele não vai pois não tem o mesmo efeito que o submit do form

pois não mudou nada com

foreach($_POST as $campo => $valor){ $$campo = $valor;}

é apenas um loop usando a mesma função $_POST não tem diferença em usar separado

só tem a vantagem de otimizar a pagina e diminuir linhas

eu sei q da url é o GET....

<?
$acao = $_GET["acao"];

if( empty( $acao ) )
{
   echo "<form method='post' action='".$_SERVER["PHP_SELF"]."?acao=testar'>";
   echo "Nome: <input type='text' name='nome' size='20'> <br>";
   echo "Idade: <input type='text' name='idade' size='15'> <br>";
   echo "<input type='submit' value='OK'>";
   echo "</form>";
}

if( $acao == "testar" )
{
   foreach( $_POST as $campo => $valor )
   {
      $$campo = $valor;
   }
   echo $nome."<br>".$idade;
}
?>
se usar assim pode digitar na url nomedapagina?acao=testar&nome=seunome&idade=suaidade q vai aparecer na tela seunome e suaidade... para "travar" tem q dar o echo dentro do próprio foreach...
...
   foreach( $_POST as $campo => $valor )
   {
      $$campo = $valor;
      echo $valor."<br>";
   }
...

mas nem sempre pode-ser usar o valor do campo dentro do próprio loop, principalmente se for usá-lo para inserir num banco de dados...

Link para o comentário
Compartilhar em outros sites

  • 0

não sei se você não ta entendendo mas o $_POST é pra pegar dados com o metodo

post e $_GET com get e o loop ali não é nada diferente só que esta dentro do loop

mas continua sendo o $_POST se você digitar na url ?nome=nome não é pra $_POST

pegar e se pegar é uma falha do sistema e não do loop

mas nem sempre pode-ser usar o valor do campo dentro do próprio loop, principalmente se for usá-lo para inserir num banco de dados...

ai que ta da pra usar um loop sim pra salvar direto todos os dados

as vezes faço isso bastante quando migro de um banco para o outro

eu pego todos os dados e dentro do loop já salvo no outro banco

obs: o que pode estar acontecendo é que você usa o register_globals em on e display_errors = off

dai ele pega direto as variaveis sem precisar das $_POST ou $_GET

Link para o comentário
Compartilhar em outros sites

  • 0

O Desculpa se eu respondi mal eu não queria dizer que você não sabe, e é claro que você sabe disso

mas era sobre isso que chegamos num acordo, dai nesse caso com register_globals = on não precisa usar nada pra pegar

os dados, mas tem um detalhe importante com register_globals on tem um falha muito grande na segurança e ela deixou de ser setada pra on no php 4.0 agora ela esta obsoleta e seu uso não é aconselhavel

obs: se o server deixa o register globals = on basta você setar ele no ini_set pra off

pra garantir a segurança dos seus script

Link para o comentário
Compartilhar em outros sites

  • 0

http://br.php.net/manual/pt_BR/security.globals.php

o register_globals esta obsoleto e é incentivado pelo php para nunca mais usarem

pois deixa uma brecha muito grande na segurança e tem varios programadores

que ainda teimam em usar

um dos principais motivos é que você não precisa pegar os dados vindos do post

basta setar direto na variavel e pronta ela já esta em uso e ai que ta o perigo

qualquer um que sabe mecher um pouco no php por entrar em logins ou sistema

basta enviar um outro valor pra essa variavel

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...