Mensagem sobre o tópico
falhas de segurança em PHP (index sumindo)
Received: by 10.35.111.17 with SMTP id o17mr146673pym.1174572397364;
Thu, 22 Mar 2007 07:06:37 -0700 (PDT)
Received: by y80g2000hsf.googlegroups.com with HTTP;
Thu, 22 Mar 2007 14:06:35 +0000 (UTC)
X-IP: 200.187.22.66
From: "leogois" <camposgue...@gmail.com>
To: "LISTA PHP" <listaphp@googlegroups.com>
Subject: =?iso-8859-1?q?falhas_de_seguran=E7a_em_PHP_(index_sumindo)?=
Date: Thu, 22 Mar 2007 07:06:35 -0700
Message-ID: <1174572395.021431.180140@y80g2000hsf.googlegroups.com>
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Avant Browser),gzip(gfe),gzip(gfe)
X-HTTP-Via: 1.0 prxsecba00.sec.ba.gov.br:3128 (squid/2.5.STABLE14)
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Pessoal,
Coloquei um site com linguagem PHP. Logo, me deparei com um grande
problema: simplesmente um belo dia fui acessar o site e o c=F3digo fonte
da p=E1gina index havia sumido. Isso j=E1 ocorreu por tr=EAs vezes. Imagino
que, por alguma falha de seguran=E7a, algu=E9m est=E1 provocando isso.
Para esclarecer melhor como contruir meu site, destado o seguinte:
arquivo index: index.php
p=E1ginas internas: nome.php
Aparece no browser: Ex.: http://www.meusite.com/index.php?page=3Dartigos
Coloquei um c=F3digo em php para que todas as p=E1ginas internas abram no
meio do site, mantendo o resto co conte=FAdo intacto: topo, menu e
rodap=E9. Coloque o seguinte c=F3digo no local onde inserir o conte=FAdo do
centro do site: <?php if(isset($page)) { include
("$page.php"); }else{ include ("principal.php"); } ?>
Minha pergunta =E9: o que pode est=E1 acontendo com o meu site e o que
fazer para solucionar este problema?
De acordo uma pesquisa que fiz, encontrei o c=F3digo abaixo que tarvez
contenha a solu=E7=E3o. Mas, como inserir em minha p=E1gina substituindo o
c=F3digo atual?
"Um m=E9todo seguro de incluir arquivos seria como o abaixo:
<?php
//cabe=E7alho do site
$page =3D $_GET['page'];
//para ter certeza que $page =E9 alfanum=E9rico.
if(eregi("^[a-z0-9\-_\.]+$", $page, $regs)) {
$dir =3D "includes/"; //pode ser branco
$ext =3D ".php"; //.php, .html, .txt, whatever
if(file_exists($dir . $page . $ext)) {
include($dir . $page . $ext); //ou outro tipo de extens=E3o se
n=E3o for necessariamente um arquivo .php
} else {
echo '404 - Not Found'; //ou algo similar
}
} else {
echo 'Naughty Naughty, very Naughty.'; /rodap=E9 do site
}
?>
Ent=E3o o link: index.php?page=3Dabout (assumiria about.php dentro do
diret=F3rio 'includes').
Se voc=EA sabe que o arquivo que ser=E1 inclu=EDdo n=E3o conte c=F3digo PHP=
e
sim apenas texto, ent=E3o pode ser melhor usar readfile() ao inv=E9s de
include()/require(), pois ambos ir=E3o executar qualquer c=F3digo PHP que
eles encontrarem algo que o readifle n=E3o ir=E1.
Usando um diret=F3rio separado para incluir arquivos, pode ser =F3timo
como uma forma de parar urls do tipo: "includes/http://blah.com/
lala.txt" que n=E3o ir=E1 funcionar. Isso n=E3o =E9 realmente necess=E1rio =
se um
utilizar um ereg como filtro nas urls.
Algumas pessoas nomeiam os arquivos que ser=E3o inclu=EDdos com a extens=E3o
'=2Einc', isso =E9 muito perigoso, pois .'inc' n=E3o =E9 interpretado como =
um
c=F3digo PHP pelo Web server e ser=E1 visualiz=E1vel no navegador como um
texto na pagina. Isso parece algo banal, mas infelizmente muitos usam
arquivos do tipo 'config.inc' que contem senhas de banco de dados etc,
algo que torna o sistema muito inseguro...
Arquivos que ser=E3o inclu=EDdos devem ter a extens=E3o .php, pode ser
exemplo.inc.php se voc=EA realmente quer que o nome contenha '.inc',
algo que eu acho desnecess=E1rio.
Voc=EA deve mant=EA-los fora do diret=F3rio root por uma pequena quest=E3o
adicional de seguran=E7a."