Segurança insegura !

Sunday, April 5, 2009
By Augusto Pascutti

Falha de SegurançaAlguns de vocês já sabem que o próximo PHPSPCast já foi gravado e está sendo editado, o tema dele é segurança ! Segurança é algo com o qual sempre devemos estar preocupados, mas como em diversas áreas de desenvolvimento, não basta “achar”; é necessário estudar e entender todos os problemas de segurança de determinadas implementações.
É comum cairmos no mesmo problema em que nosso colega caiu. Ele queria proteger o phpinfo() dele das demais pessoas, ele poderia muito bem remover essa funcionalidade depois, mas ele corria o risco de esquecer e isto ficar aberto pra sempre. Pensando nisso e na segurança do ambiente dele, ele acabou com a seguinte solução:

    1 <?php
    2  if ($_SERVER['REMOTE_ADDR'] == '192.168.2.89')
    3  {
    4    phpinfo();
    5  } else {
    6    echo "<h1>You're like, not authorized to view this.</h1>";
    7  }
    8 ?>

A falha se encontra no fato de que não se deve confiar na variável $_SERVER. É comum as pessoas acreditarem que quem fornece esses dados é o servidor http e que eles são intocáveis. Mas a super global $_SERVER é tão manipulável quanto qualquer outra variável, portanto o que foi criado acima foi uma falsa idéia de segurança.
O post original pode ser encontrado aqui.

Augusto Pascutti

Augusto Pascutti é desenvolvedor PHP a 5 anos, trabalhou em projetos Open Source como CakePHP, Zend Framework e Habari. É evangelista PHP e de boas práticas, Zend Certified Engineer para PHP 5, fundador/coordenador do PHPSP, host do PHPSPCast e headbanger nas horas vagas.

Website - More Posts

Tags: , ,

  • http://egovsergo.com Michael

    Gostaria de lhe agradecer a comentar sobre o meu PHP e sobre o meu artigo !

    Como eu disse no meu artigo original, não se trata de uma medida não-seguros. Está correto dizer que existe pelo menos uma falha (em utilizar $ _SERVER). No entanto, (Eu devia ter dito isso no artigo) Eu sou o único usuário no desenvolvimento máquina. Isto não faz a fiabilidade de $ _SERVER completo, mas tem que melhorar um pouco.

    Está igualmente correcto que esta é uma solução imperfeita: o melhor é sempre para remover phpinfo () a partir de máquinas de produção.

    (Eu escrevi este comentário traduzido em Inglês e que os seus leitores. Peço desculpas por qualquer idioma erros. :)

  • http://egovsergo.com Michael

    PS Eu gosto da foto do carro! Muito inteligente para este tópico.

  • http://www.augustopascutti.com Augusto Pascutti

    É, o grande problema foi que não ficou explícito o problema possível para a solução, mas como vc mesmo disse, ela adiciona uma camada de segurança sobre o problema, mas não o resolve ! =]

    E o comentário fico bem em português, dá pra entender perfeitamente !

  • http://itatux.blogspot.com Erick Belluci Tedeschi

    Legal o próximo PodCast ter foco em segurança, infelizmente é um assunto um pouco desprezado e muitas pessoas tem falsa sensação de segurança…
    Bom, sobre o post, para não acontecer de esquecer de tirar o phpinfo() do server de produção, bloqueia ele no php.ini através da diretiva “disable_functions”.

    t+

  • JP

    Nosso amigo Michael também pisou na bola na distro… trocar Slackware por Ubuntu???????

  • http://egovsergo.com/2009/04/03/protecting-your-phpinfo/ Protecting your phpinfo(), sort of. « Ego vs Ergo

    [...] 6 April 2009 — I have modified the title of the article in response to our colleague’s response to this post over at PHPSP.org.br. Possibly related posts: (automatically generated)You can know about php [...]

  • José Carlos

    é possivel manipular a variavel $_SERVER mesmo com a register_globals desabilitada no php.ini ?

  • Josmar

    Zé,

    O cara não sabe!