Ir para a pagina inicial dos Grupos do Google    LISTA PHP
falhas de segurança em PHP (index sumindo)

leogois <camposgue...@gmail.com>

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ódigo fonte
da página index havia sumido. Isso já ocorreu por três vezes. Imagino
que, por alguma falha de segurança, alguém está provocando isso.

Para esclarecer melhor como contruir meu site, destado o seguinte:
 arquivo index: index.php
páginas internas: nome.php

Aparece no browser: Ex.: http://www.meusite.com/index.php?page=artigos

Coloquei um código em php para que todas as páginas internas abram no
meio do site, mantendo o resto co conteúdo intacto: topo, menu e
rodapé. Coloque o seguinte código no local onde inserir o conteúdo do
centro do site: <?php if(isset($page)) { include
("$page.php"); }else{ include ("principal.php"); } ?>

Minha pergunta é: o que pode está acontendo com o meu site e o que
fazer para solucionar este problema?
De acordo uma pesquisa que fiz, encontrei o código abaixo que tarvez
contenha a solução. Mas, como inserir em minha página substituindo o
código atual?

"Um método seguro de incluir arquivos seria como o abaixo:

<?php
//cabeçalho do site
$page = $_GET['page'];
//para ter certeza que $page é alfanumérico.
if(eregi("^[a-z0-9\-_\.]+$", $page, $regs)) {
    $dir = "includes/"; //pode ser branco
    $ext = ".php"; //.php, .html, .txt, whatever
    if(file_exists($dir . $page . $ext)) {
        include($dir . $page . $ext); //ou outro tipo de extensão se
não for necessariamente um arquivo .php
    } else {
        echo '404 - Not Found'; //ou algo similar
    }

} else {

    echo 'Naughty Naughty, very Naughty.'; /rodapé do site
}

?>

Então o link: index.php?page=about (assumiria about.php dentro do
diretório 'includes').

Se você sabe que o arquivo que será incluído não conte código PHP e
sim apenas texto, então pode ser melhor usar readfile() ao invés de
include()/require(), pois ambos irão executar qualquer código PHP que
eles encontrarem algo que o readifle não irá.

Usando um diretório separado para incluir arquivos, pode ser ótimo
como uma forma de parar urls do tipo: "includes/http://blah.com/
lala.txt" que não irá funcionar. Isso não é realmente necessário se um
utilizar um ereg como filtro nas urls.

Algumas pessoas nomeiam os arquivos que serão incluídos com a extensão
'.inc', isso é muito perigoso, pois .'inc' não é interpretado como um
código PHP pelo Web server e será visualizável 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ão incluídos devem ter a extensão .php, pode ser
exemplo.inc.php se você realmente quer que o nome contenha '.inc',
algo que eu acho desnecessário.

Você deve mantê-los fora do diretório root por uma pequena questão
adicional de segurança."