TeHospedo

www.TeHospedo.com.br

TeHospedo - Serviços de Internet
TeHospedia

Uso apropriado da função include e variações

De TeHospedia

A função include(), include_once(), require() e require_once() do PHP devem ser usadas com muito cuidado.

Um simples script pode permitir acesso a qualquer arquivo dentro do seu site ou mesmo do servidor. Se a TeHospedo encontrar algum caso assim, daremos um prazo para corrigir, não toleramos vulnerabilidades em scripts.

Tabela de conteúdo

Exemplo de script inseguro

teste.php:

<?php
  include $_REQUEST['pagina'] . '.php';
?>

Você coloca um link em seu site: http://seusite.com.br/teste.php?pagina=arquivo - porém qualquer arquivo pode ser lido em seu site! Cuidado com soluções simples como esta.

Solução 1 e ideal: permitindo somente arquivos pré-aprovados

Existem várias formas de permitir expressamente que um arquivo possa ser incluído dinamicamente. Pode-se até usar banco de dados, mas a solução mais simples é usando o switch:

teste.php:

<?php
  switch ($_REQUEST['pagina']) {
    // cada case e' um arquivo autorizado
    case "arquivo":
    case "index":
    case "contato":
      $incluir = $_REQUEST['pagina'] . ".php";
    break;
    default: 
      die("Arquivo nao autorizado");
  }
  include $incluir;
?>

Assim, somente os arquivos: "arquivo.php", "index.php" e "contato.php" poderão ser incluidos.

Solução 2: usando expressões regulares

Neste caso, somente autorizamos arquivos que contenham letras e números e colocamos todos os arquivos num determinado subdiretório, assim, somente arquivos desta pasta poderão ser incluidos.

<?php
  function validarInclusao($pagina)  
  {
    // expressao regular que somente autoriza a-z, 0-9, A-Z, - e _
    if (preg_match("/^[a-z0-9_-]+$/i", $pagina)) {
      return true;
    }
    return false;
  }

  // pasta com os arquivos permitidos
  $pasta = 'paginas/';

  // se nao esta validado, acaba o script
  if (validarInclusao($_REQUEST['pagina']) == false) {
    die("Arquivo nao autorizado");
  }
 
  $incluir = $pasta . $_REQUEST['pagina'] . '.php';
  
  // se arquivo nao existir, acaba o script
  if (!file_exists($incluir)) {
    die("Arquivo nao autorizado");
  }

  // por fim, inclui o arquivo
  include($incluir);
  
?>

Leia também

Ferramentas pessoais
Relacionamento
Esta página foi modificada pela última vez às 09h10min, 19 de junho de 2007. - Esta página foi acessada 1 733 vezes. - Sobre
 
Capa Empresa Mapa do site Política de uso Infra-estrutura Trabalhe conosco