+1

Novidades no PHP 4.1.0

criado por Roberto Bertó em 02/04/2002 10:03pm
aaaa

As novas variáveis do PHP 4.1.0 ($_GET, $_POST, $_REQUEST, etc) reduzem as chances de um script ser escrito de forma errada, dando chance para bugs de segurança.

A segurança do exemplo que o próprio PHP.net mostrou:

<?php
if (authenticate_user()) {
  $authenticated = true;
}
...

if ($authenticated == true)
{
  echo "Authenticated!";
}
?> 

Simplesmente era fácil de ser burlado, pois bastava você por um ?authenticated=1 no request e voilá, temos um user autenticado.

O fato é que esse problema já fora previsto por muitos desenvolvedores que já estavam habituados em usar o unset() ou outros meios para evitar esse tipo de furo de segurança.

A partir de agora, temos 7 novos tipos de arrays globais que devem ser usados em substituição do antigo formato.

$_GET - variaveis de um request GET
$_POST - variabeis de um request POST
$_COOKIE - variaveis de cookies
$_SERVER - variaveis do httpd (ex:, REMOTE_ADDR)
$_ENV - variaveis do sistema
$_REQUEST - juncao de GET + POST + Cookie
$_SESSION - variaveis do modulo de Sessions.

Na próxima página eu inseri alguns exemplos e uma bibliografia de consulta.

Comentários:

Mostrando 1 - 6 de 6 comentários
Diogo,

Nem sempre é apropriado permitir o $_GET indiretamente usando o $_REQUEST.

Tudo o que for pedido em $_GET podera ser armazenado no log do servidor de paginas (Apache, etc) e nao é interessante permitir que os dados de login (senha, usuario) fiquem gravados de forma descriptografada de forma associada.

Claro que isso é se voce nao usar POST no seu form.
29/08/2003 7:40pm (~13 anos atrás)

Diogo Gomes disse:
Ao invés de usar $_POST ou $GET, eu não poderia usar apenas $_REQUEST...
29/08/2003 6:41pm (~13 anos atrás)

Sim, há um jeito, use o $_SERVER["HTTP_REFERER"]. Atraves desta variavel voce tera o endereco de onde o visitante veio. Se o form estava em: http://meu.dominio.com.br/form.html e o action do form é http://meu.dominio.com.br/form.php, entao dentro do http://meu.dominio.com.br/form.php terá a variavel $_SERVER["HTTP_REFERER"] que basta um codigo:

<?PHP

if ('http://meu.dominio.com.br/form.html&#039; != $_SERVER["HTTP_REFERER"])
{
print "Tentando burlar!";
}
?>
10/04/2002 11:30am (~14 anos atrás)

Sim, a seguranca melhora, pois restringe o escopo das variaveis que o usuario pode inserir no código. Assim sendo, um programador nao ira deixar, sem querer, as mesmas falhas que eram ocasionadas quando o escopo das variaveis do usuario eram globais.
03/04/2002 9:12pm (~14 anos atrás)

Felipe Lopes disse:
"Bem, em termos práticos, o que antes era: Agora é: " Remete a ideia de q o modo anterior, apenas chamando a variavel naum eh mais valido?? Outra coisa, a segurança, na minha opinião naum melhora tanto pois c o programador usou o $_POST, basta o cara chamar o script d validação d um form q ele fez, naum??
[]'s

Felipe Lopes
03/04/2002 8:52am (~14 anos atrás)

Ola Rafael,

Esclarecendo rapidamente: voce deve usar o $_GET ou $_POST ou $_REQUEST nos seguintes casos:

Use $_GET["valor"] em:
- <form action="script.php" method="GET">
<input type=hidden name=valor value=valor>
- script.php?valor=valor
- <form action="script.php?valor=valor" method="GET">


Use $_POST["valor"] somente em:
<form action="script.php" method="POST">
<input type=hidden name=valor value=valor>

Use $_REQUEST["valor"] e $_REQUEST["valor2"] em:
<form action="script.php?valor2=algo" method="POST">
<input type=hidden name=valor value=valor>

Caso eu nao tenha sanado sua duvida, para que voce quer saber se uma variavel veio de um form?
02/04/2002 11:12pm (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)